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 }
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:
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.
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";
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";
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";
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
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;
Wenn Sie den Parameter auf Kontoebene einstellen möchten, können Sie den folgenden Befehl verwenden:
ALTER ACCOUNT SET QUOTED_IDENTIFIERS_IGNORE_CASE = TRUE;
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];
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";
Hinweise zur Migration¶
Groß-/Kleinschreibung des Bezeichners überprüfen: Achten Sie bei der Migration auf Snowflake auf eine konsistente Groß-/Kleinschreibung, insbesondere bei Bezeichnern in Anführungszeichen.
Zeichenfolgenliterale: Ersetzen Sie Zeichenfolgenliterale in doppelten Anführungszeichen durch Literale in einfachen Anführungszeichen.
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.Gründlich testen: Stellen Sie sicher, dass alle Objektreferenzen nach der Migration korrekt funktionieren.