SnowConvert AI – SQL Server – Azure-Synapse – CREATE PROCEDURE (Snowflake Scripting)¶
BEGIN- und COMMIT-Transaktion¶
Übersetzungsreferenz zur Konvertierung einer BEGIN/COMMIT-Transaktion von Transact-SQL in Snowflake SQL
Applies to
SQL Server
Azure Synapse Analytics
Beschreibung¶
Snowflake SQL kann eine Transaktion explizit durch die Ausführung einer BEGIN-Anweisung gestartet werden. Snowflake unterstützt die Synonyme BEGINWORK und BEGINTRANSACTION. Snowflake empfiehlt die Verwendung von BEGINTRANSACTION.
A transaction can be ended explicitly by executing COMMIT. For more information, see the Snowflake Transactions documentation.
Beispielhafte Quellcode-Muster¶
Die folgenden Beispiele zeigen die Transaktionsanweisungen BEGIN und COMMIT.
Transact-SQL¶
BEGIN/COMMIT TRANSACTION¶
Beginn/Commit-Transaktion mit Label¶
Snowflake SQL¶
BEGIN/COMMIT¶
BEGIN/COMMIT-Transaktion mit Label¶
Bekannte Probleme¶
Verschachtelte Transaktionen werden in Snowflake nicht unterstützt. Lesen Sie die folgende Dokumentation für weitere Informationen: https://docs.snowflake.com/en/sql-reference/transactions
CALL¶
Übersetzungsreferenz für die CALL-Anweisung
Applies to
SQL Server
Azure Synapse Analytics
Beschreibung¶
The CALL statement is not supported in Snowflake Scripting since this is part of the ODBC API and not a SQL statement, therefore this statement is not translated.
CASE¶
Übersetzungsreferenz zur Konvertierung des CASE-Ausdrucks von Transact-SQL in Snowflake Scripting
Applies to
SQL Server
Azure Synapse Analytics
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Transact-SQL hat zwei mögliche Formate für den CASE-Ausdruck. Beide dienen der Auswertung von Ausdrücken und der bedingten Gewinnung von Ergebnissen. Die erste bezieht sich auf einen Simple CASE-Ausdruck, der auswertet, ob ein input_expression mit einem oder mehreren when_expression übereinstimmt. Der zweite wertet jeden booleschen Ausdruck unabhängig aus. Die ELSE-Klausel wird in beiden Formaten unterstützt.
Laut der offiziellen Transact-SQL Case-Dokumentation:
CASE kann in jeder Anweisung oder Klausel verwendet werden, die einen gültigen Ausdruck erlaubt. Zum Beispiel können Sie CASE in Anweisungen wie SELECT, UPDATE, DELETE und SET und in Klauseln wie select_list, IN, WHERE, ORDER BY und HAVING verwenden.
For more information, see the Transact-SQL CASE documentation.
Anmerkung: Transact-SQL erlaubt es, input_expression und boolean_expression optional in Klammern zu kapseln; Snowflake Scripting ebenfalls.
Beispielhafte Quellcode-Muster¶
Die folgenden Beispiele beschreiben zwei Szenarien, in denen der CASE-Ausdruck verwendet werden kann, sowie die Unterschiede zu Snowflake Scripting.
Nach Case auswählen¶
Transact-SQL¶
Simple CASE¶
Searched CASE¶
Ergebnis¶
sqlLOGINID |
Status |
|---|---|
adventure-works\ken0 |
SINGLE |
adventure-works\ erri0 |
SINGLE |
adventure-works\roberto0 |
MARIED |
adventure-works\rob0 |
SINGLE |
adventure-works\gail0 |
MARIED |
adventure-works\jossef0 |
MARIED |
adventure-works\dylan0 |
MARIED |
adventure-works\diane1 |
SINGLE |
adventure-works\gigi0 |
MARIED |
adventure-works\michael6 |
MARIED |
Snowflake Scripting¶
Beachten Sie, dass es in diesem Szenario keine Unterschiede in Bezug auf den CASE-Ausdruck selbst gibt.
Warnung
The declaration and assignment of the res variable is to demonstrate the functional equivalence between both languages. It does not appear in the actual output.
Simple CASE¶
Searched CASE¶
Ergebnis¶
LOGINID |
STATUS |
|---|---|
adventure-worksken0 |
SINGLE |
adventure-works erri0 |
SINGLE |
adventure-worksoberto0 |
MARIED |
adventure-worksob0 |
SINGLE |
adventure-worksgail0 |
MARIED |
adventure-worksjossef0 |
MARIED |
adventure-worksdylan0 |
MARIED |
adventure-worksdiane1 |
SINGLE |
adventure-worksgigi0 |
MARIED |
adventure-worksmichael6 |
MARIED |
Mit Case einstellen¶
Die Datenbank AdventureWorks2019 wurde in beiden Sprachen verwendet, um die gleichen Ergebnisse zu erzielen.
Transact-SQL¶
Simple Case¶
Searched Case¶
Ergebnis¶
result |
|---|
150 |
Snowflake Scripting¶
Warnung
Snowflake Scripting does not allow setting a case expression directly to a variable. Both Transact-SQL Case expression formats translate to the following grammar in Snowflake Scripting.
SimpleCase¶
Searched Case¶
Ergebnis¶
result |
|---|
150 |
Zugehörige EWIs¶
[SSC-EWI-0073](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.
CREATE PROCEDURE¶
Übersetzungsreferenz zur Konvertierung von CREATE PROCEDURE-Klauseln von Transact-SQL in Snowflake
Applies to
SQL Server
Azure Synapse Analytics
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Die CREATE PROCEDURE-Anweisung ermöglicht die Erstellung von gespeicherten Prozeduren, die Folgendes können:
Eingabeparameter akzeptieren und mehrere Werte in Form von Ausgabeparametern an die aufrufende Prozedur oder den Batch zurückgeben.
Programmieranweisungen enthalten, die Operationen in der Datenbank durchführen, einschließlich des Aufrufs anderer Prozeduren.
Einen Statuswert an eine aufrufende Prozedur oder einen Batch zurückgeben, um Erfolg oder Misserfolg (und den Grund für den Misserfolg) anzuzeigen.
For more information, see the Transact-SQL CREATE PROCEDURE documentation.
Beispielhafte Quellcode-Muster¶
Gespeicherte Prozedur ohne Body¶
A stored procedure without a body is an unusual scenario that is allowed in Transact-SQL. Snowflake Scripting does not allow defining procedures without a body, but the following example shows the equivalence.
Transact-SQL¶
Prozedur¶
Snowflake Scripting¶
Grundlegende gespeicherte Prozedur¶
Das folgende Beispiel zeigt eine einfache gespeicherte Prozedur, mit der eine neue Datenschutzabteilung in die Datenbank AdventureWorks2019 aufgenommen wird.
Transact-SQL¶
Snowflake Scripting¶
Alter-Prozedur¶
Die Transformation für die Prozedur ALTER entspricht der Basisprozedur.
Transact-SQL¶
Snowflake Scripting¶
Parameter verwenden¶
Sie können Parameter verwenden, um Ihre Logik zu steuern oder dynamische SQL Anweisungen innerhalb Ihrer gespeicherten Prozedur zu konstruieren. Im folgenden Beispiel wird eine einfache gespeicherte Prozedur SetNewPrice konstruiert, die einen neuen Produktpreis auf der Grundlage der vom Aufrufer gesendeten Argumente festlegt.
Transact-SQL¶
Snowflake Scripting¶
Ausgabeparameter¶
Ein Transact-SQL-Ausgabeschlüsselwort gibt an, dass der Parameter ein Ausgabeparameter ist, dessen Wert an die aufrufende Person der gespeicherten Prozedur zurückgegeben wird. Die folgende Prozedur gibt zum Beispiel die Anzahl der Urlaubsstunden einer bestimmten Person der Belegschaft zurück.
Transact-SQL¶
Snowflake Scripting¶
Optionale Parameter¶
Ein Parameter gilt als optional, wenn bei der Deklaration des Parameters ein Standardwert angegeben wurde. Es ist nicht notwendig, einen Wert für einen optionalen Parameter in einem Prozeduraufruf anzugeben.
Transact-SQL¶
Snowflake Scripting¶
EXECUTE AS¶
Die EXECUTE AS-Klausel von Transact-SQL definiert den Ausführungskontext der gespeicherten Prozedur und gibt an, welches Benutzerkonto die Datenbank-Engine verwendet, um die Berechtigungen für Objekte zu überprüfen, auf die innerhalb der Prozedur verwiesen wird. Wir können zum Beispiel die vorherige GetVacationHours-Prozedur ändern, um verschiedene Ausführungskontexte zu definieren.
Eigentümer (Standard in Snowflake Scripting)
Transact-SQL¶
Snowflake Scripting¶
Aufrufer¶
Transact-SQL¶
Snowflake Scripting¶
Warnung
SELF und spezifische Benutzer (user_name)-Ausführungskontexte werden in Snowflake Scripting nicht unterstützt.
READONLY AND VARYING PARAMETERS¶
Snowflake unterstützt die Parametertypen READONLY und VARYING nicht, stattdessen wird ein FDM hinzugefügt.
Transact-SQL¶
Snowflake Scripting¶
Bekannte Probleme¶
Nicht unterstützte optionale Argumente¶
[VARYING] Gilt nur für Cursor-Parameter. Gibt das Resultset an, das als Ausgabeparameter unterstützt wird. Dieser Parameter wird von der Prozedur dynamisch erstellt und sein Inhalt kann variieren. Snowflake Scripting unterstützt CURSOR nicht als gültigen Rückgabedatentyp.
[= default] Macht einen Parameter durch die Definition eines Standardwertes optional. Snowflake Scripting unterstützt von Haus aus keine Standardparameterwerte.
[READONLY] Zeigt an, dass der Parameter im Body der Prozedur nicht aktualisiert oder geändert werden kann. Derzeit in Snowflake Scripting nicht unterstützt.
[WITH RECOMPILE] Zwingt die Datenbankmaschine, den Abfrageplan der gespeicherten Prozedur bei jeder Ausführung zu kompilieren. Derzeit in Snowflake Scripting nicht unterstützt.
[WITH ENCRYPTION] Wird verwendet, um den Text einer gespeicherten Prozedur zu verschlüsseln. Nur Benutzer mit Zugriff auf Systemtabellen oder Datenbankdateien (z. B. Sysadmin-Benutzer) können nach der Erstellung auf den Prozedurtext zugreifen. Derzeit in Snowflake Scripting nicht unterstützt.
[FOR REPLICATION] Schränkt die gespeicherte Prozedur so ein, dass sie nur während der Replikation ausgeführt wird. Derzeit in Snowflake Scripting nicht unterstützt.
Zugehörige EWIs¶
[SSC-EWI-0030](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0030): Die nachstehende Anweisung enthält Verwendungen von dynamischen SQL.
[SSC-EWI-0058](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0058): Die Funktionalität wird derzeit nicht von Snowflake Scripting unterstützt.
CURSOR¶
Übersetzungsreferenz zur Konvertierung der CURSOR-Anweisung von Transact-SQL in Snowflake Scripting
Applies to
SQL Server
Azure Synapse Analytics
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Transact-SQL statements produce a complete result set, but there are times when the results are best processed one row at a time. Opening a cursor on a result set allows processing the result set one row at a time. You can assign a cursor to a variable or parameter with a cursor data type. For more information, see the Transact-SQL Cursors documentation.
Beispielhafte Quellcode-Muster¶
Transact-SQL¶
Beachten Sie, dass die folgenden Parameter bereits von Snowflake Scripting unterstützt werden.
[LOCAL].
[FORWARD_ONLY].
[FAST_FORWARD] Gibt ein FORWARD\_ONLY (nurFETCH NEXT) und READ_ONLY an
[READ_ONLY] die WHERE CURRENT OF existiert nicht in Snowflake Scripting.
Cursor¶
Ergebnis¶
Snowflake Scripting¶
Cursor¶
Ergebnis¶
Bekannte Probleme¶
Die folgenden Parameter werden nicht unterstützt:
DECLARE CURSOR
\ GLOBAL ] Ermöglicht den Verweis auf den Cursornamen in jeder gespeicherten Prozedur oder jedem Batch, der von der Verbindung ausgeführt wird. Snowflake Scripting erlaubt die Verwendung des Cursors nur lokal.
[ SCROLL ] Snowflake Scripting unterstützt nur FETCH NEXT.
[ KEYSET | DYNAMIC ] Wenn nach dem Öffnen eines Cursors eine Aktualisierung an der Tabelle vorgenommen wird, können diese Optionen einige der Änderungen beim Abrufen des Cursors anzeigen. Snowflake Scripting unterstützt nur STATIC, d.h. nach dem Öffnen des Cursors werden die Änderungen an der Tabelle vom Cursor nicht erkannt.
[SCROLL_LOCKS] Gibt an, dass positionierte Aktualisierungen oder Löschungen, die über den Cursor vorgenommen werden, garantiert erfolgreich sind. Snowflake Scripting kann dies nicht garantieren.
[OPTIMISTIC] Wenn eine Aktualisierung oder Löschung über den Cursor erfolgt, werden Vergleiche von Zeitstempelspaltenwerten oder ein Prüfsummenwert verwendet, wenn die Tabelle keine Zeitstempelspalte hat, um festzustellen, ob die Zeile geändert wurde, nachdem sie in den Cursor eingelesen wurde. Snowflake Scripting verfügt nicht über einen internen Prozess zur Replikation.
[TYPE_WARNING]
FETCH
[PRIOR | FIRST | LAST] Snowscripting unterstützt nur NEXT.
[ABSOLUTE] Snowflake Scripting unterstützt nur NEXT, aber die Verhaltensweise kann repliziert werden.
[RELATIVE] Snowflake Scripting, aber die Verhaltensweise kann repliziert werden.
\ GLOBAL ] Ermöglicht den Verweis auf den Cursornamen in jeder gespeicherten Prozedur oder jedem Batch, der von der Verbindung ausgeführt wird. Snowflake Scripting erlaubt die Verwendung des Cursors nur lokal.
FETCH ohne INTO wird nicht unterstützt.
Wenn sich die Anweisung FETCH innerhalb einer Schleife befindet, wird dies als komplexes Muster betrachtet, da es sich auf die Leistung des von Snowflake übersetzten Codes auswirken kann. Weitere Informationen finden Sie im Abschnitt „Verwandte Themen“.
Beispiel innerhalb der Schleife abrufen¶
SQL Server¶
Snowflake¶
OPEN¶
\ GLOBAL ] Ermöglicht den Verweis auf den Cursornamen in jeder gespeicherten Prozedur oder jedem Batch, der von der Verbindung ausgeführt wird. Snowflake Scripting erlaubt die Verwendung des Cursors nur lokal.
CLOSE
\ GLOBAL ] Ermöglicht den Verweis auf den Cursornamen in jeder gespeicherten Prozedur oder jedem Batch, der von der Verbindung ausgeführt wird. Snowflake Scripting erlaubt die Verwendung des Cursors nur lokal.
DEALLOCATED entfernt eine Cursor-Referenz und es gibt keine Entsprechung in Snowflake Scripting.
WHERE CURRENT OF: Die Verwendung dieser Anweisung wird nicht unterstützt, zum Beispiel:
Umgebungsvariablen
@@CURSOR_ROWS
@@FETCH_STATUS
Zugehörige EWIs¶
[SSC-FDM-TS0013](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/sqlServerFDM. md#ssc-fdm-ts0013): Snowflake Scripting Cursor-Zeilen sind nicht änderbar.
SSC-PRF-0003: Das Abrufen innerhalb einer Schleife wird als komplexes Muster betrachtet; dies kann die Leistung von Snowflake beeinträchtigen.
DECLARE¶
Übersetzungsreferenz zur Konvertierung der DECLARE-Anweisung von Transact-SQL in Snowflake Scripting
Applies to
SQL Server
Azure Synapse Analytics
Beschreibung¶
Transact-SQL DECLARE statement allows the creation of variables that can be used in the scope of the batch or a stored procedure. For more information, see the Transact-SQL DECLARE documentation.
Beispielhafte Quellcode-Muster¶
Variablen deklarieren¶
Variablen können auf unterschiedliche Weise erstellt werden. Variablen können einen Standardwert haben oder nicht und es können mehrere Variablen in derselben Zeile deklariert werden.
Notice that Snowflake Scripting does not allow creating more than one variable per line.
Transact-SQL¶
Snowflake Scripting¶
Deklarieren Sie Tabellenvariablen¶
Transact-SQL ermöglicht die Erstellung von Tabellenvariablen, die als reguläre Tabellen verwendet werden können. Snowflake Scripting unterstützt dies nicht. Stattdessen kann eine Tabelle erstellt und dann am Ende der Prozedur gelöscht werden.
Transact-SQL¶
Snowflake Scripting¶
DECLARE-Anweisung außerhalb von Routinen (Funktionen und Prozeduren)¶
Im Gegensatz zu Transact-SQL unterstützt Snowflake nicht die Ausführung von isolierten Anweisungen wie DECLARE außerhalb von Routinen wie Funktionen oder Prozeduren. In diesem Szenario sollte die Anweisung in einem anonymen Block gekapselt werden, wie in den folgenden Beispielen gezeigt. Diese Anweisung wird normalerweise vor einem SET STATEMENT verwendet.
Transact-SQL¶
Snowflake Scripting¶
Wenn es ein Szenario mit nur DECLARE-Anweisungen gibt, sollte der BEGIN…END-Block eine RETURN NULL-Anweisung enthalten, um Fehler zu vermeiden, da dieser Block nicht leer sein kann.
Transact-SQL¶
Snowflake Scripting¶
EXECUTE¶
Übersetzungsreferenz zur Konvertierung der EXECUTE-Anweisung von Transact-SQL in Snowflake
Applies to
SQL Server
Azure Synapse Analytics
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Transact-SQL EXECUTE statement allows the execution of a command string or character string within a Transact-SQL batch, a scalar-valued user-defined function, or a stored procedure. For more information, see the Transact-SQL EXECUTE documentation.
Beispielhafte Quellcode-Muster¶
Ausführung einer Zeichenfolge¶
EXECUTE kann verwendet werden, um SQL-Operationen durchzuführen, die direkt als Literale übergeben werden. Im folgenden Beispiel wird sie innerhalb einer gespeicherten Prozedur verwendet, die eine neue Datenschutzabteilung in die Datenbank AdventureWorks2019 einfügt.
Transact-SQL¶
Snowflake Scripting¶
Ausführung einer gespeicherten Prozedur¶
EXECUTE kann auch verwendet werden, um eine vorhandene gespeicherte Prozedur aufzurufen. Das folgende Beispiel ruft die AddPrivacyDepartment-Prozedur auf, die oben erstellt wurde. Anschließend wird eine SELECT ausgeführt, um zu überprüfen, ob die neue Abteilung erfolgreich aufgenommen wurde.
Transact-SQL¶
Ergebnis¶
DepartmentID |
Name |
GroupName |
ModifiedDate |
|---|---|---|---|
1 |
Engineering |
Research and Development |
2008-04-30 00:00:00,000 |
2 |
Tool Design |
Research and Development |
2008-04-30 00:00:00,000 |
3 |
Sales |
Sales and Marketing |
2008-04-30 00:00:00,000 |
4 |
Marketing |
Sales and Marketing |
2008-04-30 00:00:00,000 |
5 |
Purchasing |
Inventory Management |
2008-04-30 00:00:00,000 |
6 |
Research and Development |
Research and Development |
2008-04-30 00:00:00,000 |
7 |
Produktion |
Manufacturing |
2008-04-30 00:00:00,000 |
8 |
Production Control |
Manufacturing |
2008-04-30 00:00:00,000 |
9 |
Human Resources |
Executive General and Administration |
2008-04-30 00:00:00,000 |
1 0 |
Finanzen |
Executive General and Administration |
2008-04-30 00:00:00,000 |
1 1 |
Information Services |
Executive General and Administration |
2008-04-30 00:00:00,000 |
1 2 |
Document Control |
Quality Assurance |
2008-04-30 00:00:00,000 |
1 3 |
Quality Assurance |
Quality Assurance |
2008-04-30 00:00:00,000 |
1 4 |
Facilities and Maintenance |
Executive General and Administration |
2008-04-30 00:00:00,000 |
1 5 |
Shipping and Receiving |
Inventory Management |
2008-04-30 00:00:00,000 |
1 6 |
Executive |
Executive General and Administration |
2008-04-30 00:00:00,000 |
1 7 |
Datenschutz |
Executive General and Administration |
2021-11-17 12:42:54.640 |
Snowflake Scripting¶
Ergebnis¶
DEPARTMENTID |
NAME |
GROUPNAME |
MODIFIEDDATE |
|---|---|---|---|
1 |
Engineering |
Research and Development |
2021-11-17 10:29:36.963 |
2 |
Tool Design |
Research and Development |
2021-11-17 10:29:37.463 |
3 |
Sales |
Sales and Marketing |
2021-11-17 10:29:38.192 |
4 |
Marketing |
Sales and Marketing |
2021-11-17 10:29:38.733 |
5 |
Purchasing |
Inventory Management |
2021-11-17 10:29:39.298 |
6 |
Research and Development |
Research and Development |
2021-11-17 10:31:53.770 |
7 |
Produktion |
Manufacturing |
2021-11-17 10:31:55.082 |
8 |
Production Control |
Manufacturing |
2021-11-17 10:31:56.638 |
9 |
Human Resources |
Executive General and Administration |
2021-11-17 10:31:57.507 |
10 |
Finanzen |
Executive General and Administration |
2021-11-17 10:31:58.473 |
11 |
Information Services |
Executive General and Administration |
2021-11-17 10:34:35.200 |
12 |
Document Control |
Quality Assurance |
2021-11-17 10:34:35.741 |
13 |
Quality Assurance |
Quality Assurance |
2021-11-17 10:34:36.277 |
14 |
Facilities and Maintenance |
Executive General and Administration |
2021-11-17 10:34:36.832 |
15 |
Shipping and Receiving |
Inventory Management |
2021-11-17 10:34:37.373 |
16 |
Executive |
Executive General and Administration |
2021-11-17 10:34:37.918 |
17 |
Datenschutz |
Executive General and Administration |
2021-11-17 10:46:43.345 |
Ausführung von lokalen Variablen und Verwendung von Parametern¶
Ein häufiger Anwendungsfall für die Anweisung EXECUTE ist, wenn dynamische SQL Anweisungen benötigt werden. In diesem Fall könnte die Anweisung anstelle der Ausführung eines Zeichenfolgenliterals dynamisch konstruiert und einer lokalen Variablen zugewiesen werden, die dann ausgeführt wird. Eine Reihe von Argumenten kann an die aufgerufene gespeicherte Prozedur gesendet werden, um den dynamischen SQL-Befehl zu erstellen.
Im folgenden Beispiel wird eine einfache gespeicherte Prozedur SetNewPrice konstruiert, die die Anweisung EXECUTE verwendet, um einen neuen Produktpreis auf der Grundlage der vom Aufrufer gesendeten Argumente festzulegen. Zum Schluss wird ein SELECT durchgeführt, um den neuen Produktpreis zu bestätigen.
Transact-SQL¶
Ergebnis¶
ListPrice |
|---|
34.9900 |
Snowflake Scripting¶
Ergebnis¶
LISTPRICE |
|---|
34.9900 |
Bekannte Probleme¶
Rückgabecodes verwenden¶
Die Transact-SQL EXECUTE-Syntax enthält das optionale Argument @return_status, mit dem Sie eine skalare Variable erstellen können, um den Rückgabestatus einer skalarwertigen benutzerdefinierten Funktion zu speichern.
Sie kann auch in gespeicherten Prozeduren verwendet werden, obwohl der zurückgegebene Status auf den Datentyp Ganzzahl beschränkt ist.
Um diese Funktionalität darzustellen, könnten wir das obige Beispiel leicht abändern und eine benutzerdefinierte Funktion erstellen, die den neuen Produktpreis als Durchschnitt der historischen Preise berechnet. Anstatt ihn an die gespeicherte Prozedur zu übergeben, könnten wir nun die Funktion CalculateAveragePrice aufrufen, um den neuen Preis zu erhalten, und ihn in der Rückgabevariablen speichern, um die dynamische SQL zu erstellen.
Transact-SQL¶
Execute¶
Ergebnis¶
ListPrice |
|---|
34.0928 |
Snowflake Scripting¶
Nicht unterstützte optionale Argumente¶
@return_status
;number
@module__name_v_ar
WITH RECOMPILE, WITH RESULT SETS NONE, WITH <result set definition>
Zugehörige EWIs¶
[SSC-EWI-0030](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0030): Die nachstehende Anweisung enthält Verwendungen von dynamischen SQL.
IF¶
Übersetzungsreferenz zur Konvertierung von IF..ELSE-Klauseln von Transact-SQL in Snowflake Scripting
Applies to
SQL Server
Azure Synapse Analytics
Beschreibung¶
Die IF-Klausel ermöglicht die bedingte Ausführung einer SQL-Anweisung oder eines Anweisungsblocks, solange der boolesche Ausdruck „true“ ist; andernfalls werden die Anweisungen in der optionalen ELSE-Klausel ausgeführt. Transact-SQL unterstützt auch die Einbettung mehrerer IF… ELSE-Klauseln, falls mehrere Bedingungen erforderlich sind, oder die CASE-Klausel kann ebenfalls verwendet werden.
For more information, see the Transact-SQL IF…ELSE documentation.
Anmerkung: Um einen Anweisungsblock zu definieren, verwenden Sie die Control-of-Flow-Schlüsselwörter BEGIN und END.
Beispielhafte Quellcode-Muster¶
Transact-SQL¶
Der folgende Code verweist auf eine IF… ELSE in Transact-SQL, die die Variable @value daraufhin überprüft, ob sie kleiner als 5 ist, ob sie zwischen 5 und 10 liegt oder ob sie einen anderen Wert hat. Da @Wert mit 7 initialisiert ist, muss die zweite Bedingung „true“ sein und das Ergebnis muss 200 sein.
IF…ELSE¶
Ergebnis¶
result |
|---|
200 |
Snowflake Scripting¶
Bemerkung
Beachten Sie, dass in Snowflake Scripting die eingebettete IF… ELSE-Bedingung ELSEIF genannt wird.
Außerdem ist die boolesche Bedingung in Klammern eingeschlossen und die Klausel endet immer mit dem Ausdruck END IF.
Außerdem ist es in Snowflake Scripting nicht notwendig, die Schlüsselwörter BEGIN und END zu verwenden, um einen Anweisungsblock zu definieren, aber es kann bei Bedarf verwendet werden.
IF…ELSE¶
Ergebnis¶
result |
|---|
200 |
IF-Anweisung außerhalb von Routinen (Funktionen und Prozeduren)¶
Im Gegensatz zu Transact-SQL unterstützt Snowflake die Ausführung isolierter Anweisungen wie IF…ELSE nicht außerhalb von Routinen wie Funktionen oder Prozeduren. Für dieses Szenario sollte die Anweisung in einem anonymen Block gekapselt werden, wie im folgenden Beispiel gezeigt. Weitere Informationen darüber, wie Sie die Ausgabewerte korrekt zurückgeben, finden Sie im SELECT-Abschnitt.
Transact-SQL¶
Snowflake Scripting¶
Zugehörige EWIs¶
[SSC-EWI-0073](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.
[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.
LABEL und GOTO¶
Übersetzungsreferenz für die Konvertierung von LABEL AND GOTO in Transact-SQL
Applies to
SQL Server
Beschreibung¶
Snowflake SQL unterstützt keine GOTO LABEL-Anweisungen. Derzeit werden LABELS kommentiert und es wird eine Warnung für alle Vorkommnisse hinzugefügt.
Beispielhafte Quellcode-Muster¶
Die folgenden Beispiele zeigen die Transaktionsanweisungen BEGIN und COMMIT.
Transact-SQL¶
Beschriftete Anweisungen¶
Snowflake SQL¶
Beschriftete Anweisungen¶
LABEL- und GOTO-Anweisung außerhalb von Routinen (Funktionen und Prozeduren)¶
Transact-SQL¶
Snowflake Scripting¶
Zugehörige EWIs¶
[SSC-EWI-TS0045](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/sqlServerEWI. md#ssc-ewi-ts0045): LABELED-Anweisung wird in Snowflake Scripting nicht unterstützt.
[SSC-EWI-0073](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.
OUTPUT PARAMETERS¶
In diesem Artikel geht es um die aktuelle Transformation der Ausgabeparameter und wie deren Funktionalität emuliert wird.
Applies to
SQL Server
Azure Synapse Analytics
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
An output parameter is a parameter whose value is passed out of the stored procedure, back to the calling SQL block. Since the output parameters are not supported by Snowflake Scripting, a solution has been implemented to emulate their functionality.
Beispielhafte Quellcode-Muster¶
Einzelner OUT-Parameter¶
Das einfachste Szenario für OUT ist, wenn die Prozedur nur einen Parameter hat. In diesem Fall geben wir einfach den Parameter OUT am Ende des Bodys der Prozedur zurück.
Die Prozedur EXEC muss ebenfalls übersetzt werden. Dazu wird eine CALL erstellt, die Parameter werden ohne Modifikator übergeben (OUT wird entfernt) und anschließend wird eine Zuweisung vorgenommen, damit der Parameter mit dem entsprechenden Ergebniswert verknüpft wird.
Transact-SQL¶
Snowflake Scripting¶
Mehrere OUT-Parameter¶
Wenn mehr als ein OUT-Parameter gefunden wird, ändert sich die RETURNS-Klausel der Prozedur in VARIANT. Dies dient dazu, OBJECT_CONSTRUCT unterzubringen, die zum Speichern der Werte der OUT-Parameter verwendet werden soll.
Außerdem wird am Ende des Bodys der Prozedur die Anweisung RETURN eingefügt. Hier wird OBJECT_COSNTRUCT erstellt und alle OUT-Parameterwerte werden darin gespeichert. Dieses Objekt wird dann vom Aufrufer verwendet, um den Parameterwert dem entsprechenden Ergebnis zuzuordnen.
Transact-SQL¶
Snowflake Scripting¶
OUT-parameter und Rückgabewerte¶
Transact-SQL erlaubt Prozeduren, Rückgabewerte zu haben. Wenn eine Prozedur sowohl einen Rückgabewert als auch einen oder mehrere OUT-Parameter hat, wird ein ähnlicher Ansatz wie bei Mehrere OUT-Parameter verfolgt. Der ursprüngliche Rückgabewert wird so behandelt, wie ein OUT-Parameter behandelt werden würde, d.h. er wird in OBJECT_CONSTRUCT gespeichert und innerhalb der Aufrufer-Prozedur extrahiert.
Transact-SQL¶
Snowflake Scripting¶
Abfrage¶
Kundendatentyp OUT-Parameter¶
when the output parameter is a custom type, the process is similar to a regular data type.
Transact-SQL¶
Snowflake Scripting¶
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
[SSC-EWI-0073](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.
SSC-EWI-TS0015: Der Datentyp wird in Snowflake nicht unterstützt.
SET¶
Übersetzungsreferenz zur Konvertierung der SET-Anweisung von Transact-SQL in Snowflake
Applies to
SQL Server
Azure Synapse Analytics
Beschreibung¶
Sets the specified local variable, previously created by using the DECLARE @local_variable statement, to the specified value. For more information, see the Transact-SQL SET documentation.
Es gibt vier SET-Fälle, die folgenden sind:
Beispielhafte Quellcode-Muster¶
Transact-SQL¶
Fall 1¶
Fall 2¶
Ergebnis 1¶
Ergebnis |
|---|
0 |
Snowflake Scripting¶
Fall 1¶
Fall 2¶
Ergebnis 1¶
Ergebnis |
|---|
0 |
SET-Anweisung außerhalb von Routinen (Funktionen und Prozeduren)¶
Im Gegensatz zu Transact-SQL unterstützt Snowflake nicht die Ausführung von isolierten Anweisungen wie SET außerhalb von Routinen wie Funktionen oder Prozeduren. In diesem Szenario sollte die Anweisung in einem anonymen Block gekapselt werden, wie in den folgenden Beispielen gezeigt. Diese Anweisung wird normalerweise nach einer DECLARE STATEMENT-Anweisung verwendet.
Transact-SQL¶
Snowflake Scripting¶
Wenn es ein Szenario mit nur SET-Anweisungen gibt, ist der DECLARE-Block nicht notwendig. Wahrscheinlich führt dieses Szenario zu Laufzeitfehlern, wenn versucht wird, einen Wert für eine nicht deklarierte Variable zu setzen.
Transact-SQL¶
Snowflake Scripting¶
Bekannte Probleme¶
1. SET of a local variable with property name¶
Diese Art von Set wird derzeit von Snowflake Scripting nicht unterstützt.
2. SET of a local variable with mutator method¶
Diese Art von Set wird derzeit von Snowflake Scripting nicht unterstützt.
Zugehörige EWIs¶
[SSC-EWI-TS0037](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/sqlServerEWI. md#ssc-ewi-ts0037): Snowflake Scripting Cursors sind nicht scrollbar.
[SSC-EWI-0073](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.
[SSC-FDM-TS0013](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/sqlServerFDM. md#ssc-fdm-ts0013): Snowflake Scripting Cursor-Zeilen sind nicht änderbar.
TRY CATCH¶
Übersetzungsreferenz für die TRY CATCH-Anweisung in Transact-SQL.
Applies to
SQL Server
Azure Synapse Analytics
Beschreibung¶
Implementiert die Fehlerbehandlung für Transact-SQL. Eine Gruppe von Transact-SQL-Anweisungen kann in einen TRY-Block eingeschlossen werden. Wenn im TRY-Block ein Fehler auftritt, wird die Kontrolle normalerweise an eine andere Gruppe von Anweisungen übergeben, die in einem CATCH-Block eingeschlossen ist.
Beispielhafte Quellcode-Muster¶
Das folgende Beispiel beschreibt die Transformation für TRY CATCH innerhalb von Prozeduren.
Transact-SQL¶
Ausgabe¶
Snowflake SQL¶
Ausgabe¶
Versuchen Sie außerhalb von Routinen (Funktionen und Prozeduren) zu fangen¶
Transact-SQL¶
Snowflake Scripting¶
Zugehörige EWIs¶
[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.
WHILE¶
Übersetzungsreferenz zur Konvertierung der WHILE-Anweisung von Transact-SQL in Snowflake Scripting
Applies to
SQL Server
Azure Synapse Analytics
Beschreibung¶
Die WHILE-Anweisung ermöglicht die wiederholte Ausführung einer SQL-Anweisung oder eines Anweisungsblocks, solange die angegebene Bedingung „true“ ist. Die Ausführung von Anweisungen in der WHILE-Schleife kann innerhalb der Schleife mit den Schlüsselwörtern BREAK und CONTINUE gesteuert werden.
For more information, see the Transact-SQL WHILE documentation.
Anmerkung: Um einen Anweisungsblock zu definieren, verwenden Sie die Control-of-Flow-Schlüsselwörter BEGIN und END.
Beispielhafte Quellcode-Muster¶
Muster für grundlegenden Quellcode¶
Transact-SQL¶
Der folgende Code bezieht sich auf eine While-Schleife in Transact-SQL, die die Variable @Iteration iteriert und den Ablauf der Schleife so steuert, dass sie beendet wird, wenn der Wert von @Iteration gleich 10 ist.
Bemerkung
Anweisungen nach dem Schlüsselwort CONTINUE werden nicht ausgeführt.
While¶
Ergebnis¶
Iteration |
|---|
10 |
Snowflake Scripting¶
Bemerkung
Wie bei Transact-SQL werden auch bei Snowflake Scripting die Anweisungen nach dem Schlüsselwort CONTINUE nicht ausgeführt.
Beachten Sie, dass es in Snowflake Scripting nicht notwendig ist, die Schlüsselwörter BEGIN und END zu verwenden, um einen Anweisungsblock zu definieren, aber eine Verwendung ist bei Bedarf möglich.
While¶
Schlüsselwort LOOP¶
Snowflake Scripting erlaubt es, das Schlüsselwort LOOP anstelle von DO und den Ausdruck END LOOP anstelle von END WHILE zu verwenden.
Ergebnis¶
Iteration |
|---|
10 |
Quellcode-Muster „While“ mit leerem Body¶
Transact-SQL¶
Bemerkung
Bitte beachten Sie, dass dieses Beispiel geschrieben wurde, als die Anweisung IF ELSE noch nicht unterstützt wurde. Die Unterschiede in den Ergebnissen sollten verschwinden, wenn die Unterstützung für die Anweisung implementiert wird.
Ergebnis¶
result |
|---|
125 |
Snowflake Scripting¶
Diese Anweisung kann in Snowflake Scripting keinen leeren Text-Body haben. Um diesen Fall zu lösen, wird eine Standardanweisung BREAK hinzugefügt, wenn ein leerer Text-Body erkannt wird.
Ergebnis¶
result |
|---|
1 |
WHILE-Anweisung außerhalb von Routinen (Funktionen und Prozeduren)¶
Im Gegensatz zu Transact-SQL unterstützt Snowflake nicht die Ausführung von isolierten Anweisungen wie WHILE außerhalb von Routinen wie Funktionen oder Prozeduren. In diesem Szenario sollte die Anweisung in einem anonymen Block gekapselt werden, wie im folgenden Beispiel gezeigt.
Transact-SQL¶
Snowflake Scripting¶
Zugehörige EWIs¶
[SSC-EWI-0073](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.