SnowConvert AI – SQL Server – Azure Synapse – Allgemeine Sprachelemente¶
In diesem Abschnitt finden Sie Informationen über allgemeine Anweisungen von Transact-SQL.
COLLATE¶
Applies to
SQL Server
Azure Synapse Analytics
Die Transformation von Collate hängt von seinem Wert ab, da er unterstützt oder nicht unterstützt werden kann.
Derzeit sind dies die Sprachen, die für die Transformation unterstützt werden. Wenn sie in der Zusammenstellung gefunden werden, werden sie in ihre Snowflake-Entsprechung umgewandelt.
SQL Server |
Snowflake |
|---|---|
Latin1_General |
EN |
Modern_Spanish |
ES |
Französisch |
FR |
Wenn die Sprache nicht eine der oben genannten ist, wird die Sortierung (Collate) kommentiert.
The collate in SQL Server comes with additional specifications, such as CI, CS, AI, and AS. If there are additional specifications that are unsupported, they will be commented in the result.
Quelle¶
Erwartet¶
Sehen wir uns ein Collate-Beispiel in einem Create Table an
Quelle¶
Erwartet¶
Wie Sie sehen können, ist die Transformation von Collate innerhalb eines Selects oder einer Tabelle dieselbe.
COMPUTED COLUMN¶
Der berechnete Ausdruck konnte nicht transformiert werden.
Applies to
SQL Server
Azure Synapse Analytics
Beschreibung¶
Der Ausdruck einer berechneten Spalte konnte nicht umgewandelt werden.
Codebeispiel¶
Eingabecode:¶
Ausgabecode:¶
Empfehlungen¶
Fügen Sie manuelle Änderungen an dem nicht transformierten Ausdruck hinzu.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
Zugehörige EWIs¶
[SSC-FDM-TS0014](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/sqlServerFDM. md#ssc-fdm-ts0014): Berechnete Spalte transformiert.
OUTER APPLY¶
Äquivalenzübersetzung der OUT APPLY-Anweisung.
Applies to
SQL Server
Azure Synapse Analytics
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Wenn OUTER APPLY angegeben ist, wird für jede Zeile des linken Rowsets eine Zeile erzeugt, auch wenn der rechtsseitige Rowset-Ausdruck für diese Zeile ein leeres Rowset liefert. (OUTER APPLY-Definition)
Syntax¶
Snowflake-Äquivalenz¶
Trotz der nicht unterstützten Anweisung OUTER APPLY in Snowflake gibt es eine gleichwertige Anweisung, die LATERAL lautet. Daher wird die Übersetzung für die Anweisung durchgeführt, um die gleiche Funktionalität durch die Verwendung von alternativen Lösungen zu erhalten.
Dennoch gibt es für die Anweisung LATERAL in Snowflake zwei Varianten der Syntax. In der Tat wird in dieser speziellen Übersetzung die Variante INNER JOIN LATERAL verwendet.
Die INNER JOIN LATERAL Grammatik von Snowflake lautet wie folgt:
Bemerkung
<inline\view> darf kein Tabellenname sein.
Und die einzelne LATERAL-Anweisung wird unten angezeigt:
Beispielhafte Quelle¶
Das folgende Beispiel zeigt eine allgemeine Übersetzung zwischen OUTER APPLY und INNER JOIN LATERAL:
SQL Server¶
Ausgabe¶
p.ProjectName |
e.ProjectName |
FirstName |
|---|---|---|
Projekt A |
Projekt A |
John |
Projekt A |
Projekt A |
Jane |
Projekt A |
Projekt B |
Michael |
Projekt B |
Projekt A |
John |
Projekt B |
Projekt A |
Jane |
Projekt B |
Projekt B |
Michael |
Projekt C |
Projekt A |
John |
Projekt C |
Projekt A |
Jane |
Projekt C |
Projekt B |
Michael |
Snowflake¶
Ausgabe¶
PROJECTNAME |
PROJECTNAME_2 |
FIRSTNAME |
|---|---|---|
Projekt A |
Projekt A |
John |
Projekt A |
Projekt A |
Jane |
Projekt A |
Projekt B |
Michael |
Projekt B |
Projekt A |
John |
Projekt B |
Projekt A |
Jane |
Projekt B |
Projekt B |
Michael |
Projekt C |
Projekt A |
John |
Projekt C |
Projekt A |
Jane |
Projekt C |
Projekt B |
Michael |
Bekannte Probleme¶
Da die Übersetzung eine Äquivalenz aus der Eingabe ist, gibt es einige Beschränkungen.
TOP- und WHERE-Anweisungen lassen sich auf eine optimale Verhaltensweise überprüfen.
Ein Korrelationsname am Ende der Anweisung kann erforderlich sein. In Snowflake stellt die Abfrage kein Problem dar, wenn der Korrelationsname nicht in der Abfrage enthalten ist, aber die Funktionalität kann sich ändern und ist nicht Teil des akzeptierten Musters in SQL Server.
SQL Server¶
Übersetzungsausgabe¶
Bei bestimmten Anweisungen, die nicht unterstützt werden, kann der gesamte Blockcode auskommentiert werden (Beispiel aus: JSON-Beispiel).
SQL Server¶
Übersetzungsausgabe¶
Zugehörige EWIs¶
Keine zugehörigen EWIs.
USE¶
Snowflake-Äquivalenz der USE-Anweisung von Transact-SQL
Applies to
SQL Server
USE-Anweisung hat ihre eigene Entsprechung in Snowflake. Die Anweisung wird in die USE DATABASE-Anweisung in Snowflake übersetzt.
Beispiele für Übersetzungen¶
Quelle¶
Ausgabe¶
Name der Datenbank¶
Der database name, der in der Anweisung USE angegeben ist, kann sich ändern, wenn er innerhalb von eckigen Klammern ([ ]) steht. Die erste und die letzte Klammer werden durch Anführungszeichen ersetzt. Beispiel:
Quelle¶
Ausgabe¶
Benutzerdefinierte Datenbank¶
Wenn ein Benutzer dem Konvertierungstool mit dem Parameter -d einen benutzerdefinierten Datenbanknamen angibt, der auf alle Objekte angewendet werden soll, und möchte, dass die USE Anweisungen transformiert werden, sollte der Datenbankname nur auf die USE-Anweisung und nicht auf die Objekte angewendet werden. Dadurch wird die in der USE-Anweisung angegebene Datenbank außer Kraft gesetzt. Beispiel:
Quelle¶
Ausgabe¶
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
EXECUTE¶
Applies to
SQL Server
Azure Synapse Analytics
Die Übersetzung für EXEC- oder EXECUTE-Anweisungen wird in Snowflake nicht unterstützt, aber sie wird in CALL-Anweisung übersetzt.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Eingabe¶
Ausgabe¶
Weitere Informationen zu EXECUTE finden Sie unter: EXECUTE in Prozeduren
PRINT¶
Applies to
SQL Server
Azure Synapse Analytics
Die Anweisung Print wird in Snowflake nicht direkt unterstützt, wird aber in ihr ähnlichstes Äquivalent übersetzt, die integrierte Funktion SYSTEM$LOG_INFO.
Eingabe¶
Ausgabe (innerhalb von SnowScript)¶
Ausgabe (außerhalb von SnowScript)¶
Wenn die Anweisung Print außerhalb einer gespeicherten Prozedur verwendet wird, muss sie von einer SnowConvert AI UDP aus aufgerufen werden.
Bevor Sie mit der Protokollierung von Meldungen beginnen können, müssen Sie eine Ereignistabelle einrichten. Weitere Informationen finden Sie unter: Protokollierung von Meldungen in Snowflake Scripting
Gespeicherte Systemprozeduren¶
SP_EXECUTESQL¶
Übersetzungsspezifikation für die Systemprozedur SP_EXECUTESQL.
Applies to
SQL Server
Azure Synapse Analytics
Beschreibung¶
Die systemgespeicherte Prozedur SP_EXECUTESQL wird verwendet, um eine Transact-SQL-Anweisung oder einen Batch auszuführen, die bzw. der mehrmals wiederverwendet werden kann oder dynamisch erstellt wird. Die Anweisung oder der Batch kann eingebettete Parameter enthalten.
Diese Funktionalität kann in Snowflake über die EXECUTE IMMEDIATE-Anweisung und mit einer benutzerdefinierten Funktion (UDF) für eingebettete Parameter emuliert werden.#x20;
Weitere Informationen zu der benutzerdefinierten Funktion (UDF), die für diese Übersetzung verwendet werden, finden S ie unter TRANSFORM_SP_EXECUTE_SQL_STRING_UDF(STRING, STRING, ARRAY, ARRAY).
Syntax¶
Transact¶
Beispielhafte Quellcode-Muster¶
Alle Muster wandeln SP_EXECUTESQL in die Anweisung EXECUTE IMMEDIATE von Snowflake um und ändern die auszuführende Zeichenfolge SQL nur, wenn Sie eingebettete Parameter verwenden.
Warnung
[SSC-EWI-0030](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0030) (Verwendung von dynamischem SQL) wird für alle Muster hinzugefügt. Auch wenn die Übersetzung für SP_EXECUTESQL mit Snowflake übereinstimmt, zeigt EWI in diesem Zusammenhang an, dass die Zeichenfolge SQL möglicherweise manuell korrigiert werden muss, damit die Übersetzung wie vorgesehen ausgeführt werden kann.
Datenkonfiguration¶
Transact¶
Snowflake¶
Ohne eingebettete Parameter¶
Wenn keine eingebetteten Parameter verwendet werden, wird SP_EXECUTESQL in eine EXECUTE IMMEDIATE-Anweisung umgewandelt und die SQL-Zeichenfolge ohne Änderungen verwendet.
Transact¶
Ergebnisse¶
Name |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Maria Keller |
3 |
32 |
Mundane Mann |
4 |
18 |
Snowflake¶
Ergebnisse¶
Name |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Maria Keller |
3 |
32 |
Mundane Mann |
4 |
18 |
Mit eingebetteten Parametern für die Datenbindung¶
Bei eingebetteten Parametern für die Datenbindung wird SP_EXECUTESQL in eine EXECUTE IMMEDIATE-Anweisung umgewandelt und die SQL-Zeichenfolge wird über die TRANSFORM_SP_EXECUTE_SQL_STRING_UDF geändert.#x20;
Das Ergebnis von EXECUTE IMMEDIATE wird der Variablen ProcedureResultSet zugewiesen und später als TABLE(ProcedureResultSet) zurückgegeben.
Transact¶
Ergebnisse¶
Name |
ID |
AGE |
|---|---|---|
John Doe |
2 |
21 |
Snowflake¶
Ergebnisse¶
Name |
ID |
AGE |
|---|---|---|
John Doe |
2 |
21 |
Mit eingebetteten OUTPUT-Parametern¶
Bei eingebetteten OUTPUT-Parametern wird SP_EXECUTESQL in eine EXECUTE IMMEDIATE-Anweisung umgewandelt, und die SQL-Zeichenfolge wird durch TRANSFORM_SP_EXECUTE_SQL_STRING_UDF geändert.
Zusätzlich wird ein SELECT $1, ..., $n INTO: outputParam1, ..., :outputParamN FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) zu dem Ergebnis jeder Spalte zu dem entsprechenden OUTPUT-Parameter hinzugefügt.
Warnung
SSC-FDM-TS0028 wird der Anweisung SELECT INTO hinzugefügt. Es ist wichtig, dass die Parameter in der INTO-Klausel in der gleichen Reihenfolge erscheinen, wie sie in der ursprünglichen SQL -Zeichenfolge zugewiesen wurden.
Andernfalls sind manuelle Änderungen erforderlich, um diese Anforderung zu erfüllen.
Transact¶
Ergebnisse¶
<anonymous> |
|---|
32 |
Snowflake¶
Ergebnisse¶
:MAXAGE::NUMBER(38,0) |
|---|
32 |
Sowohl mit eingebetteten OUTPUT-Parametern als auch mit Datenbindung¶
Die Übersetzung ist dieselbe wie bei den OUTPUT-Parametern.
Transact¶
Ergebnisse¶
<anonymous> |
<anonymous> |
|---|---|
24 |
4 |
Snowflake¶
Ergebnisse¶
:MAXAGE::NUMBER(38,0) |
:MAXID::NUMBER(38,0) |
|---|---|
24 |
4 |
Parameter nicht in der Reihenfolge der Definition¶
Dieses Muster folgt den gleichen Regeln wie die vorherigen Muster. TRANSFORM_SP_EXECUTE_SQL_STRING_UDF ersetzt die Parameterwerte in der richtigen Reihenfolge.
Transact¶
Ergebnisse¶
<anonymous> |
<anonymous> |
|---|---|
24 |
4 |
<anonymous> |
<anonymous> |
|---|---|
24 |
4 |
Snowflake¶
Ergebnisse¶
:MAXAGE::NUMBER(38,0) |
:MAXID::NUMBER(38,0) |
|---|---|
24 |
4 |
:MAXAGE::NUMBER(38,0) |
:MAXID::NUMBER(38,0) |
|---|---|
24 |
4 |
Direkte Werte ausführen¶
This translation also handles the cases where the values are directly assigned instead of using variables.
Transact¶
Ergebnisse¶
<anonymous> |
<anonymous> |
|---|---|
24 |
4 |
Snowflake¶
Ergebnisse¶
:MAXAGE::NUMBER(38,0) |
:MAXID::NUMBER(38,0) |
|---|---|
24 |
4 |
SQL-Zeichenfolge dynamisch aufgebaut¶
Dieses Muster folgt den gleichen Regeln wie die vorherigen Muster. Die Zuweisung des Ergebnisses der EXECUTE IMMEDIATE-Anweisung wird jedoch möglicherweise nicht hinzugefügt, wenn es sich bei der Zeichenfolge SQL nicht um eine einfache Abfrage mit oder ohne eingebettete Parameter handelt.
Darüber hinaus muss die SQL-Zeichenfolge mit dem Literalwert 'SELECT' beginnen, damit SnowConvert AI korrekt identifizieren kann, dass eine SELECT-Anweisung ausgeführt wird.
Transact¶
Ergebnisse¶
Name |
ID |
AGE |
|---|---|---|
John Doe |
2 |
21 |
Snowflake¶
Ergebnisse¶
Name |
ID |
AGE |
|---|---|---|
John Doe |
2 |
21 |
Mehrere Resultsets zurückgeben¶
Bei Snowflake Scripting-Prozeduren kann nur ein Resultset pro Prozedur zurückgegeben werden.
Um die Verhaltensweise von Transact-SQL zu replizieren, werden zwei oder mehr Resultsets, die zurückgegeben werden sollen, in temporären Tabellen gespeichert. Die Snowflake Scripting-Prozedur gibt ein Array mit den Namen der temporären Tabellen zurück. Weitere Informationen finden Sie unter [SSC-FDM-0020](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/generalFDM. md#ssc-fdm-0020).
Transact¶
Ergebnisse¶
Name |
ID |
AGE |
|---|---|---|
John Doe |
2 |
21 |
Name |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Maria Keller |
3 |
32 |
Mundane Mann |
4 |
18 |
INSERT FIRST |
1200 |
230 |
Snowflake¶
Ergebnisse¶
WITH_MULTIPLE_RETURNS |
|---|
[ „RESULTSET_88C35D7A_1E5B_455D_97A4_247806E583A5“, „RESULTSET_B2345B61_A015_43CB_BA11_6D3E013EF262“ ] |
Bekannte Probleme¶
1. Invalid code is detected¶
SP_EXECUTESQL kann mehr als eine SQL-Anweisung innerhalb der SQL-Zeichenfolge ausführen. Snowflake unterstützt auch die Ausführung mehrerer SQL-Anweisungen, die aber in einen BEGIN ... END-Block eingeschlossen sein müssen. Außerdem gibt EXECUTE IMMEDIATE bei der Ausführung mehrerer Anweisungen von einem BEGIN ... END-Block kein Resultset zurück. Die Übersetzung für diese Fälle wird momentan noch nicht von SnowConvert AI unterstützt. Weitere Informationen dazu finden Sie unter SSC-EWI-0030.
Wenn also dieser Fall erkannt wird, wird im übersetzten Code EXECUTE IMMEDIATE nicht ProcedureResultSet zugewiesen.
Transact¶
Ergebnisse¶
Name |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Maria Keller |
3 |
32 |
Mundane Mann |
4 |
18 |
INSERT FIRST |
1200 |
230 |
Snowflake¶
Ergebnisse¶
2. Valid or Invalid code is not detected¶
Wenn die SQL-Zeichenfolge dynamisch durch Verkettungen erstellt wird, erkennt SnowConvert AI möglicherweise nicht, welche Anweisung ausgeführt werden soll. Daher wird EXECUTE IMMEDIATE im übersetzten Code nicht dem ProcedureResultSet zugewiesen.
Transact¶
Ergebnisse¶
Name |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Maria Keller |
3 |
32 |
Mundane Mann |
4 |
18 |
INSERT FIRST |
1200 |
230 |
Snowflake¶
Ergebnisse¶
3. Invalid code is mistaken as valid¶
Wenn der SQL-Zeichenfolge mit einer SELECT-Anweisung beginnt und weitere Anweisungen folgen, erkennt SnowConvert AI dies als gültigen Code und versucht, das Ergebnis von EXECUTE IMMEDIATE zum ProcedureResultSet zuzuordnen. Dies führt zu einem Kompilierungsfehler. Weitere Informationen dazu finden Sie unter SSC-EWI-0030.
Transact¶
Ergebnisse¶
Name |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Maria Keller |
3 |
32 |
Mundane Mann |
4 |
18 |
Name |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Maria Keller |
3 |
32 |
Mundane Mann |
4 |
18 |
Snowflake¶
Ergebnisse¶
Zugehörige EWIs¶
[SSC-EWI-0030](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0030): Die folgende Anweisung enthält dynamische SQL-Verwendungen
[SSC-FDM-TS0028](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/sqlServerFDM. md#ssc-fdm-ts0028): Die Ausgabeparameter müssen die gleiche Reihenfolge haben, wie sie im ausgeführten Code erscheinen.
[SSC-FDM-0020](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/generalFDM. md#ssc-fdm-0020): Mehrere Resultsets werden in temporären Tabellen zurückgegeben.
SP_RENAME¶
Stored Procedure to Rename certain objects in SQL Server
Applies to
SQL Server
Azure Synapse Analytics
Die SP_RENAME-Speicherprozedur des Systems kann in bestimmten Szenarien in Snowflake emuliert werden. Im Allgemeinen ist das Äquivalent EXECUTE IMMEDIATE unter Verwendung einer dynamischen Anweisung mit ALTER TABLE und den ursprünglichen Parametern.
Übersetzungsbeispiele für Tabellen¶
Quelle¶
Ausgabe¶
Quelle¶
Ausgabe¶
Übersetzungsbeispiele für Spalten¶
Quelle¶
Ausgabe¶
Quelle¶
Ausgabe¶
Zugehörige EWIs¶
[SSC-EWI-TS0075](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/sqlServerEWI. md#ssc-ewi-ts0075): Übersetzung für integrierte Prozedur wird derzeit nicht unterstützt.
WAITFOR DELAY¶
Applies to
SQL Server
Azure Synapse Analytics
Beschreibung¶
In SQL Server, WAITFOR DELAY pauses execution for a specified duration. SnowConvert AI transforms WAITFOR DELAY statements to Snowflake’s CALL SYSTEM$WAIT() function, which provides equivalent delay functionality.
The time string is parsed and converted to seconds (or milliseconds for sub-second precision). Variables and parameters are passed through directly with an EWI warning, since SYSTEM$WAIT expects a numeric value rather than a time string.
Bemerkung
WAITFOR TIME (which pauses until a specific time of day) has no Snowflake equivalent and remains flagged with SSC-EWI-0073.
Beispiele für Übersetzungen¶
WAITFOR DELAY with literal time¶
Eingabecode:¶
Generated Code:¶
WAITFOR DELAY with sub-second precision¶
Eingabecode:¶
Generated Code:¶
WAITFOR DELAY with variable¶
Eingabecode:¶
Generated Code:¶
WAITFOR DELAY at script level¶
Eingabecode:¶
Generated Code:¶
Known Limitations¶
WAITFOR TIME(pause until a specific time of day) has no Snowflake equivalent and is flagged with SSC-EWI-0073.When a variable is used, SSC-EWI-TS0094 is emitted because
SYSTEM$WAITexpects a numeric value but the variable may contain a time string in'HH:MM:SS'format.
Zugehörige EWIs¶
SSC-EWI-TS0094: WAITFOR DELAY variable may contain a time string incompatible with SYSTEM$WAIT.
SSC-EWI-0073: Pending functional equivalence review (emitted for WAITFOR TIME).
CREATE STATISTICS¶
Applies to
SQL Server
Azure Synapse Analytics
Beschreibung¶
SnowConvert AI comments out CREATE STATISTICS statements because Snowflake automatically collects optimizer statistics and does not require this statement.
Translation Example¶
Eingabecode:¶
Generated Code:¶
Additional Example¶
Eingabecode:¶
Generated Code:¶
Known Limitations¶
Any operational process that explicitly creates or refreshes statistics in SQL Server should be reviewed, because Snowflake manages optimizer statistics automatically.