SnowConvert AI – SQL Server – Azure Synapse – QUOTED_IDENTIFIER

Applies to
  • SQL Server

  • Azure Synapse Analytics

Beschreibung

Diese Anweisung steuert, ob doppelte Anführungszeichen zum Trennen von Bezeichnern (wie Tabellennamen, Spaltennamen usw.) oder von Zeichenfolgenliteralen in SQL Server verwendet werden. Wenn SET QUOTED_IDENTIFIER auf ON gesetzt ist, können Bezeichner durch doppelte Anführungszeichen getrennt werden, und Literale müssen durch einfache Anführungszeichen getrennt werden. Wenn OFF angegeben ist, werden doppelte Anführungszeichen als Trennzeichen für Zeichenfolgenliterale behandelt. Weitere Informationen zu dieser Anweisung finden Sie unter SET QUOTED_IDENTIFIER.

Transact-SQL-Syntax

 SET QUOTED_IDENTIFIER { ON | OFF }
Copy

Vergleich der Verhaltensweisen

Verhalten von SQL Server

In SQL Server legt die Einstellung SET QUOTED_IDENTIFIER fest, wie doppelte Anführungszeichen interpretiert werden:

  • Bei ON (Standard): Doppelte Anführungszeichen trennen Bezeichner, sodass Sonderzeichen und reservierte Schlüsselwörter in Objektnamen erlaubt sind.

  • Bei OFF: Doppelte Anführungszeichen werden als Trennzeichen für Zeichenfolgenliterale behandelt (ähnlich wie einfache Anführungszeichen).

Verhalten von Snowflake

Snowflake behandelt doppelte Anführungszeichen immer als Bezeichner-Trennzeichen (entspricht dem Wert ONfürQUOTED_IDENTIFIER von SQL Server). Es gibt kein Äquivalent zur Einstellung OFF. Wichtigste Unterschiede:

  1. Unterscheidung nach Groß-/Kleinschreibung:

    • Nicht in Anführungszeichen gesetzte Bezeichner werden automatisch in Großbuchstaben umgewandelt.

    • Bezeichner in Anführungszeichen behalten die genaue Groß-/Kleinschreibung bei und unterscheiden dann zwischen Groß- und Kleinschreibung.

  2. QUOTED_IDENTIFIERS_IGNORE_CASE-Parameter: Steuert die Groß-/Kleinschreibung für Bezeichner in Anführungszeichen.

Beispielhafte Quellcode-Muster

SET QUOTED_IDENTIFIER ON

Wenn QUOTED_IDENTIFIER auf ON in SQL Server gesetzt ist, können doppelte Anführungszeichen verwendet werden, um Bezeichner zu trennen, die Leerzeichen oder Sonderzeichen enthalten.

SQL Server

 SET QUOTED_IDENTIFIER ON;
 
 CREATE TABLE "Order Details" (
     "Order ID" INT,
     "Product Name" VARCHAR(50),
     "Unit Price" DECIMAL(10,2)
 );
 
 SELECT "Order ID", "Product Name" FROM "Order Details";
Copy

Snowflake

----** SSC-FDM-TS0033 - SET QUOTED_IDENTIFIER STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE **
--SET QUOTED_IDENTIFIER ON

 CREATE OR REPLACE TABLE "Order Details" (
     "Order ID" INT,
     "Product Name" VARCHAR(50),
     "Unit Price" DECIMAL(10, 2)
 )
 COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "09/22/2025",  "domain": "no-domain-provided" }}'
;

 SELECT
     "Order ID",
     "Product Name"
 FROM
     "Order Details";
Copy

Beispiel für den Unterschied

Nehmen wir an, Sie haben eine Tabelle von einer SQL Server-Datenbank mit einer Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung (_CI) migriert:

SQL Server (mit _CI-Sortierung):

-- This statement is valid
SELECT "MyColumn" FROM "MyTable";

-- This statement is also valid and returns the same result
SELECT "mycolumn" FROM "MyTable";
Copy

In diesem Fall macht die CI-Sortierung die beiden SELECT-Anweisungen austauschbar.

Snowflake:

-- This statement is valid
SELECT "MyColumn" FROM "MyTable";

-- This statement will fail because "mycolumn" does not match "MyColumn"
SELECT "mycolumn" FROM "MyTable";
-- ERROR:  SQL compilation error: error in select clause: mycolumn does not exist
Copy

Das Snowflake-Verhalten ist anders, da die Groß-/Kleinschreibung des Bezeichners in Anführungszeichen standardmäßig berücksichtigt wird. Es könnte in Betracht gezogen werden, die Sitzung zu ändern.

ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = TRUE;
Copy

Wenn Sie den Parameter auf Kontoebene einstellen möchten, können Sie den folgenden Befehl verwenden:

ALTER ACCOUNT SET QUOTED_IDENTIFIERS_IGNORE_CASE = TRUE;
Copy

Dadurch wird der Parameter für alle mit dem Konto verbundenen Sitzungen festgelegt. Weitere Informationen finden Sie in der folgenden Dokumentation;

SET QUOTED_IDENTIFIER OFF

Wenn QUOTED_IDENTIFIER auf OFF in SQL Server gesetzt ist, werden doppelte Anführungszeichen als Zeichenfolgentrennzeichen behandelt.

SQL Server

 SET QUOTED_IDENTIFIER OFF;
 
 -- Double quotes treated as string literals
 SELECT * FROM customers WHERE name = "John Doe";
 
 -- Must use square brackets for identifiers with spaces
 SELECT [Order ID] FROM [Order Details];
Copy

Snowflake

 ----** SSC-FDM-TS0028 - QUOTED_IDENTIFIER OFF behavior not supported in Snowflake **
 -- Double quotes always delimit identifiers in Snowflake
 -- Use single quotes for string literals
 SELECT * FROM customers WHERE name = 'John Doe';
 
 -- Double quotes delimit identifiers (case-sensitive)
 SELECT "Order ID" FROM "Order Details";
Copy

Hinweise zur Migration

  1. Groß-/Kleinschreibung des Bezeichners überprüfen: Achten Sie bei der Migration auf Snowflake auf eine konsistente Groß-/Kleinschreibung, insbesondere bei Bezeichnern in Anführungszeichen.

  2. Zeichenfolgenliterale: Ersetzen Sie Zeichenfolgenliterale in doppelten Anführungszeichen durch Literale in einfachen Anführungszeichen.

  3. QUOTED_IDENTIFIERS_IGNORE_CASE verwenden: Setzen Sie diesen Parameter bereits in der frühen Phase der Migration auf TRUE, um Probleme mit der Groß-/Kleinschreibung zu reduzieren.

  4. Gründlich testen: Stellen Sie sicher, dass alle Objektreferenzen nach der Migration korrekt funktionieren.