SnowConvert AI – SQL Server – CREATE FUNCTION¶
Übersetzungsreferenz für die benutzerdefinierten Transact-SQL-Funktionen
Applies to
SQL Server
Azure Synapse Analytics
Beschreibung¶
SQL Server unterstützt nur zwei Arten von benutzerdefinierten Funktionen:
Anhand dieser UDFs-Typen ist es möglich, sie nach der inneren Logik in einfach und komplex, zu unterteilen.
Einfache UDFs, gleicht die SQL Server-Syntax mit der Snowflake-Syntax ab. Dieser Typ fügt keine Logik hinzu und führt direkt zum Ergebnis. Diese entsprechen in der Regel den SQL UDFs von Snowflake. SnowConvert unterstützt die Übersetzung von benutzerdefinierten SQL Server-Skalarfunktionen direkt in Snowflake Scripting-UDFs, wenn sie bestimmte Kriterien erfüllen.\ \ Komplexe UDFs, nutzt umfassend eine bestimmte Anweisung (INSERT, DELETE, UPDATE, SET, DECLARE usw.) oder control-of-flow blocks (IF…ELSE, WHILE usw.) und stellt in der Regel eine Nichtübereinstimmung oder einen Verstoß gegenüber der Definition für SQL UDFs von Snowflake dar.
Einschränkungen¶
Transact UDFs haben einige Beschränkungen, die in anderen Datenbank-Engines (wie Oracle und Teradata) nicht vorhanden sind. Diese Beschränkungen helfen bei der Übersetzung, indem sie das Ausmaß der Fehler eingrenzen. Das bedeutet, dass es bestimmte Szenarien gibt, die wir vermeiden sollten.
Hier sind einige der Beschränkungen, die SQL Server für UDFs hat
UDFs können nicht verwendet werden, um Aktionen durchzuführen, die den Zustand der Datenbank verändern
Benutzerdefinierte Funktionen können keine OUTPUT INTO-Klausel enthalten, die eine Tabelle als Ziel hat
Benutzerdefinierte Funktionen können nicht mehrere Resultsets zurückgeben. Verwenden Sie eine gespeicherte Prozedur, wenn Sie mehrere Resultsets zurückgeben müssen.
Die vollständige Liste finden Sie unter diesem Link Benutzerdefinierte Funktionen erstellen (Datenbank-Engine)
INLINE TABLE-VALUED¶
Übersetzungsreferenz zur Konvertierung von Transact-SQL UDF (benutzerdefinierten Funktionen) mit dem TABLE-Rückgabetyp an Snowflake.
Applies to
SQL Server
Azure Synapse Analytics
Beschreibung¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Inline-Funktionen mit Tabellenwerten sind Tabellenausdrücke, die Parameter akzeptieren, eine SELECT-Anweisung ausführen und ein TABLE zurückgeben können (SQL Server-Referenz: Erstellen einer Inline-Funktion mit Tabellenwerten).
Transact-Syntax¶
Snowflake SQL-Syntax¶
Beispielhafte Quellcode-Muster¶
Der folgende Abschnitt beschreibt alle möglichen Quelltextmuster, die in dieser Art von CREATE FUNCTION-Syntax vorkommen können.
Für Inline-Funktionen mit Tabellenwerten kann es nur eine Anweisung pro Body geben, die wie folgt aussehen kann:
SELECT-AnweisungAllgemeiner Tabellenausdruck
WITH
Werte direkt aus einer Tabelle auswählen und zurückgeben¶
Dies ist das einfachste Szenario, bei dem Sie einen einfachen Select aus einer Tabelle durchführen und die Werte zurückgeben
Transact-SQL¶
Tabellenwertfunktion mit Inline-Anweisungen¶
Ergebnis¶
DepartmentID |
Name |
GroupName |
|---|---|---|
1 |
Engineering |
Research and Development |
2 |
Tool Design |
Research and Development |
3 |
Sales |
Sales and Marketing |
4 |
Marketing |
Sales and Marketing |
5 |
Purchasing |
Inventory Management |
6 |
Research and Development |
Research and Development |
7 |
Produktion |
Manufacturing |
8 |
Production Control |
Manufacturing |
9 |
Human Resources |
Executive General and Administration |
10 |
Finanzen |
Executive General and Administration |
11 |
Information Services |
Executive General and Administration |
12 |
Document Control |
Quality Assurance |
13 |
Quality Assurance |
Quality Assurance |
14 |
Facilities and Maintenance |
Executive General and Administration |
15 |
Shipping and Receiving |
Inventory Management |
16 |
Executive |
Executive General and Administration |
Snowflake SQL¶
Tabellenwertfunktion mit Inline-Anweisungen¶
Ergebnis¶
DepartmentID |
Name |
GroupName |
|---|---|---|
1 |
Engineering |
Research and Development |
2 |
Tool Design |
Research and Development |
3 |
Sales |
Sales and Marketing |
4 |
Marketing |
Sales and Marketing |
5 |
Purchasing |
Inventory Management |
6 |
Research and Development |
Research and Development |
7 |
Produktion |
Manufacturing |
8 |
Production Control |
Manufacturing |
9 |
Human Resources |
Executive General and Administration |
10 |
Finanzen |
Executive General and Administration |
11 |
Information Services |
Executive General and Administration |
12 |
Document Control |
Quality Assurance |
13 |
Quality Assurance |
Quality Assurance |
14 |
Facilities and Maintenance |
Executive General and Administration |
15 |
Shipping and Receiving |
Inventory Management |
16 |
Executive |
Executive General and Administration |
Wählen Sie Werte aus mehreren Tabellen aus und geben Sie sie zurück, indem Sie Spalten umbenennen und eingebaute Funktionen verwenden¶
Dies ist ein Beispiel für eine Abfrage mit integrierten Funktionen in einer SELECT-Anweisung, die Daten aus verschiedenen Tabellen abruft, Spalten umbenennt und eine Tabelle zurückgibt.
Transact-SQL¶
Tabellenwertfunktion mit Inline-Anweisungen¶
Ergebnis¶
PersonType |
FirstName |
JobTitle |
Geschlecht |
HIREYEAR |
|---|---|---|---|---|
EM |
Ken |
Chief Executive Officer |
M |
2009 |
EM |
Terri |
Vice President of Engineering |
F |
2008 |
EM |
Roberto |
Engineering Manager |
M |
2007 |
EM |
Rob |
Senior Tool Designer |
M |
2007 |
EM |
Gail |
Design Engineer |
F |
2008 |
EM |
Jossef |
Design Engineer |
M |
2008 |
EM |
Dylan |
Research and Development Manager |
M |
2009 |
EM |
Diane |
Research and Development Engineer |
F |
2008 |
EM |
Gigi |
Research and Development Engineer |
F |
2009 |
EM |
Michael |
Research and Development Manager |
M |
2009 |
EM |
Ovidiu |
Senior Tool Designer |
M |
2010 |
EM |
Thierry |
Tool Designer |
M |
2007 |
EM |
Janice |
Tool Designer |
F |
2010 |
EM |
Michael |
Senior Design Engineer |
M |
2010 |
EM |
Sharon |
Design Engineer |
F |
2011 |
EM |
David |
Marketing Manager |
M |
2007 |
EM |
Kevin |
Marketing Assistant |
M |
2007 |
EM |
John |
Marketing Specialist |
M |
2011 |
EM |
Maria |
Marketing Assistant |
F |
2011 |
EM |
Wanida |
Marketing Assistant |
F |
2011 |
Snowflake SQL¶
Tabellenwertfunktion mit Inline-Anweisungen¶
Ergebnis¶
PersonType |
FirstName |
JobTitle |
Geschlecht |
HIREYEAR |
|---|---|---|---|---|
EM |
Ken |
Chief Executive Officer |
M |
2009 |
EM |
Terri |
Vice President of Engineering |
F |
2008 |
EM |
Roberto |
Engineering Manager |
M |
2007 |
EM |
Rob |
Senior Tool Designer |
M |
2007 |
EM |
Gail |
Design Engineer |
F |
2008 |
EM |
Jossef |
Design Engineer |
M |
2008 |
EM |
Dylan |
Research and Development Manager |
M |
2009 |
EM |
Diane |
Research and Development Engineer |
F |
2008 |
EM |
Gigi |
Research and Development Engineer |
F |
2009 |
EM |
Michael |
Research and Development Manager |
M |
2009 |
EM |
Ovidiu |
Senior Tool Designer |
M |
2010 |
EM |
Thierry |
Tool Designer |
M |
2007 |
EM |
Janice |
Tool Designer |
F |
2010 |
EM |
Michael |
Senior Design Engineer |
M |
2010 |
EM |
Sharon |
Design Engineer |
F |
2011 |
EM |
David |
Marketing Manager |
M |
2007 |
EM |
Kevin |
Marketing Assistant |
M |
2007 |
EM |
John |
Marketing Specialist |
M |
2011 |
EM |
Maria |
Marketing Assistant |
F |
2011 |
EM |
Wanida |
Marketing Assistant |
F |
2011 |
Spalten mit der WITH-Anweisung auswählen¶
Der Body einer Inline-Funktion mit Tabellenwerten kann auch mit einer WITH -Anweisung angegeben werden, wie unten gezeigt.
Transact-SQL¶
Tabellenwertfunktion mit Inline-Anweisungen¶
Ergebnis¶
MaritalStatus |
Geschlecht |
Name |
|---|---|---|
S |
F |
Terri Duffy |
M |
F |
Gail Erickson |
S |
F |
Diane Margheim |
M |
F |
Gigi Matthew |
M |
F |
Janice Galvin |
M |
F |
Sharon Salavaria |
S |
F |
Mary Dempsey |
M |
F |
Wanida Benshoof |
M |
F |
Mary Gibson |
M |
F |
Jill Williams |
S |
F |
Jo Brown |
M |
F |
Britta Simon |
M |
F |
Margie Shoop |
M |
F |
Rebecca Laszlo |
M |
F |
Suchitra Mohan |
M |
F |
Kim Abercrombie |
S |
F |
JoLynn Dobney |
M |
F |
Nancy Anderson |
M |
F |
Ruth Ellerbrock |
M |
F |
Doris Hartwig |
M |
F |
Diane Glimp |
M |
F |
Bonnie Kearney |
M |
F |
Denise Smith |
S |
F |
Diane Tibbott |
M |
F |
Carole Poland |
M |
F |
Carol Philips |
M |
F |
Merav Netz |
S |
F |
Betsy Stadick |
S |
F |
Danielle Tiedt |
S |
F |
Kimberly Zimmerman |
M |
F |
Elizabeth Keyser |
M |
F |
Mary Baker |
M |
F |
Alice Ciccu |
M |
F |
Linda Moschell |
S |
F |
Angela Barbariol |
S |
F |
Kitti Lertpiriyasuwat |
S |
F |
Susan Eaton |
S |
F |
Kim Ralls |
M |
F |
Nicole Holliday |
S |
F |
Anibal Sousa |
M |
F |
Samantha Smith |
S |
F |
Olinda Turner |
S |
F |
Cynthia Randall |
M |
F |
Sandra Reátegui Alayo |
S |
F |
Linda Randall |
S |
F |
Shelley Dyck |
S |
F |
Laura Steele |
S |
F |
Susan Metters |
S |
F |
Katie McAskill-White |
M |
F |
Barbara Decker |
M |
F |
Yvonne McKay |
S |
F |
Janeth Esteves |
M |
F |
Brenda Diaz |
M |
F |
Lorraine Nay |
M |
F |
Paula Nartker |
S |
F |
Lori Kane |
M |
F |
Kathie Flood |
S |
F |
Belinda Newman |
M |
F |
Karen Berge |
M |
F |
Lori Penor |
M |
F |
Jo Berry |
M |
F |
Laura Norman |
M |
F |
Paula Barreto de Mattos |
M |
F |
Mindy Martin |
M |
F |
Deborah Poe |
S |
F |
Candy Spoon |
M |
F |
Barbara Moreland |
M |
F |
Janet Sheperdigian |
S |
F |
Wendy Kahn |
S |
F |
Sheela Word |
M |
F |
Linda Meisner |
S |
F |
Erin Hagens |
M |
F |
Annette Hill |
S |
F |
Jean Trenary |
S |
F |
Stephanie Conroy |
S |
F |
Karen Berg |
M |
F |
Janaina Bueno |
M |
F |
Linda Mitchell |
S |
F |
Jillian Carson |
S |
F |
Pamela Ansman-Wolfe |
S |
F |
Lynn Tsoflias |
M |
F |
Amy Alberts |
S |
F |
Rachel Valdez |
M |
F |
Jae Pak |
Snowflake SQL¶
Tabellenwertfunktion mit Inline-Anweisungen¶
Ergebnis¶
MaritalStatus |
Geschlecht |
Name |
|---|---|---|
S |
F |
Terri Duffy |
M |
F |
Gail Erickson |
S |
F |
Diane Margheim |
M |
F |
Gigi Matthew |
M |
F |
Janice Galvin |
M |
F |
Sharon Salavaria |
S |
F |
Mary Dempsey |
M |
F |
Wanida Benshoof |
M |
F |
Mary Gibson |
M |
F |
Jill Williams |
S |
F |
Jo Brown |
M |
F |
Britta Simon |
M |
F |
Margie Shoop |
M |
F |
Rebecca Laszlo |
M |
F |
Suchitra Mohan |
M |
F |
Kim Abercrombie |
S |
F |
JoLynn Dobney |
M |
F |
Nancy Anderson |
M |
F |
Ruth Ellerbrock |
M |
F |
Doris Hartwig |
M |
F |
Diane Glimp |
M |
F |
Bonnie Kearney |
M |
F |
Denise Smith |
S |
F |
Diane Tibbott |
M |
F |
Carole Poland |
M |
F |
Carol Philips |
M |
F |
Merav Netz |
S |
F |
Betsy Stadick |
S |
F |
Danielle Tiedt |
S |
F |
Kimberly Zimmerman |
M |
F |
Elizabeth Keyser |
M |
F |
Mary Baker |
M |
F |
Alice Ciccu |
M |
F |
Linda Moschell |
S |
F |
Angela Barbariol |
S |
F |
Kitti Lertpiriyasuwat |
S |
F |
Susan Eaton |
S |
F |
Kim Ralls |
M |
F |
Nicole Holliday |
S |
F |
Anibal Sousa |
M |
F |
Samantha Smith |
S |
F |
Olinda Turner |
S |
F |
Cynthia Randall |
M |
F |
Sandra Reátegui Alayo |
S |
F |
Linda Randall |
S |
F |
Shelley Dyck |
S |
F |
Laura Steele |
S |
F |
Susan Metters |
S |
F |
Katie McAskill-White |
M |
F |
Barbara Decker |
M |
F |
Yvonne McKay |
S |
F |
Janeth Esteves |
M |
F |
Brenda Diaz |
M |
F |
Lorraine Nay |
M |
F |
Paula Nartker |
S |
F |
Lori Kane |
M |
F |
Kathie Flood |
S |
F |
Belinda Newman |
M |
F |
Karen Berge |
M |
F |
Lori Penor |
M |
F |
Jo Berry |
M |
F |
Laura Norman |
M |
F |
Paula Barreto de Mattos |
M |
F |
Mindy Martin |
M |
F |
Deborah Poe |
S |
F |
Candy Spoon |
M |
F |
Barbara Moreland |
M |
F |
Janet Sheperdigian |
S |
F |
Wendy Kahn |
S |
F |
Sheela Word |
M |
F |
Linda Meisner |
S |
F |
Erin Hagens |
M |
F |
Annette Hill |
S |
F |
Jean Trenary |
S |
F |
Stephanie Conroy |
S |
F |
Karen Berg |
M |
F |
Janaina Bueno |
M |
F |
Linda Mitchell |
S |
F |
Jillian Carson |
S |
F |
Pamela Ansman-Wolfe |
S |
F |
Lynn Tsoflias |
M |
F |
Amy Alberts |
S |
F |
Rachel Valdez |
M |
F |
Jae Pak |
Bekannte Probleme¶
Es wurden keine Probleme gefunden
MULTI-STATEMENT TABLE-VALUED¶
Übersetzungsreferenz zur Konvertierung von Transact-SQL UDF (benutzerdefinierten Funktionen) mit dem TABLE-Rückgabetyp an Snowflake.
Applies to
SQL Server
Azure Synapse Analytics
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Bemerkung
Alle Codebeispiele auf dieser Seite wurden noch nicht in SnowConvert AI implementiert. Sie sollten als Referenz dafür interpretiert werden, wie jedes Szenario in Snowflake übersetzt werden soll. Diese Übersetzungen können sich in Zukunft ändern. Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Eine Tabellenwertfunktion mit mehreren Anweisungen ist ähnlich wie eine Tabellenwertfunktion mit Inline-Anweisungen (INLINE TABLE-VALUED). Eine Tabellenwertfunktion mit mehreren Anweisungen kann jedoch mehr als eine Anweisung im Funktions-Body enthalten, wobei die Tabellenspalten im Rückgabetyp angegeben sind und ein BEGIN/END-Block (SQL Server-Sprachreferenz – Erstellen einer Funktion mit Tabellenwerten für mehrere Anweisungen vorhanden ist.
Transact-SQL-Syntax¶
Snowflake SQL¶
Beispielhafte Quellcode-Muster¶
Der folgende Abschnitt beschreibt alle möglichen Quellcodemuster, die in dieser Art von ofCREATE FUNCTION-Syntax auftreten können.
Der Funktions-Body einer Tabellenwertfunktion mit mehreren Anweisungen muss eine SELECT-Anweisung sein. Aus diesem Grund müssen die anderen Anweisungen separat aufgerufen werden.
Werte in eine Tabelle einfügen¶
Fügt eine oder mehrere Zeilen in die Tabelle ein und gibt die Tabelle mit den neuen Werten zurück
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnis¶
BEHAVIORAL_SEGMENT |
|---|
Unbekannt |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnisse¶
BEHAVIORAL_SEGMENT |
|---|
Unbekannt |
Wert entsprechend der IF/ELSE-Anweisung einfügen¶
Fügt entsprechend der Bedingung eine Zeile in die Tabelle ein und gibt die Tabelle mit dem neuen Wert zurück
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnis¶
NUMBER_TYPE |
|---|
Ungerade |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnis¶
NUMBER_TYPE |
|---|
Ungerade |
Fügt mehrere gemäß der IF/ELSE-Anweisung ein¶
Das folgende Beispiel fügt mehr als einen Wert in die Tabelle ein und mehr als eine Variable wird entsprechend der Bedingung geändert. Gibt die Tabelle mit den neuen Werten zurück
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnis¶
ID_EMPLOYEE |
WORKING_FROM_HOME |
TEAM |
COMPUTER |
|---|---|---|---|
123456789 |
1 |
TEAM_1 |
LAPTOP |
Snowflake¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnis¶
ID_EMPLOYEE |
WORKING_FROM_HOME |
TEAM |
COMPUTER |
|---|---|---|---|
123456789 |
1 |
TEAM_1 |
LAPTOP |
Warnung
Falls es verschachtelte IF-Anweisungen gibt und mehr als eine Variable in den Anweisungen geändert wird, ist es notwendig, eine gespeicherte Prozedur zu verwenden.
Zuvor eingefügte Werte aktualisieren¶
Aktualisiert die Spaltenwerte der Tabelle im Funktions-Body und gibt ihn mit den neuen Werten zurück.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnis¶
DEPARTMENT_NAME |
FIRST_NAME |
LAST_NAME |
START_DATE |
END_DATE |
JOB_TITLE |
MONTHS_WORKING |
|---|---|---|---|---|---|---|
Sales |
Syed |
Abbas |
2013-03-14 |
NULL |
Pacific Sales Manager |
106 |
Produktion |
Kim |
Abercrombie |
2010-01-16 |
NULL |
Production Technician – WC60 |
144 |
Quality Assurance |
Hazem |
Abolrous |
2009-02-28 |
NULL |
Quality Assurance Manager |
155 |
Shipping and Receiving |
Pilar |
Ackerman |
2009-01-02 |
NULL |
Shipping and Receiving Supervisor |
156 |
Produktion |
Jay |
Adams |
2009-03-05 |
NULL |
Production Technician – WC60 |
154 |
Information Services |
François |
Ajenstat |
2009-01-17 |
NULL |
Database Administrator |
156 |
Sales |
Amy |
Alberts |
2012-04-16 |
NULL |
European Sales Manager |
117 |
Produktion |
Greg |
Alderson |
2008-12-02 |
NULL |
Production Technician – WC45 |
157 |
Quality Assurance |
Sean |
Alexander |
2008-12-28 |
NULL |
Quality Assurance Technician |
157 |
Facilities and Maintenance |
Gary |
Altman |
2009-12-02 |
NULL |
Facilities Manager |
145 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnis¶
DEPARTMENT_NAME |
FIRST_NAME |
LAST_NAME |
START_DATE |
END_DATE |
JOB_TITLE |
MONTHS_WORKING |
|---|---|---|---|---|---|---|
Sales |
Syed |
Abbas |
2013-03-14 |
NULL |
Pacific Sales Manager |
106 |
Produktion |
Kim |
Abercrombie |
2010-01-16 |
NULL |
Production Technician – WC60 |
144 |
Quality Assurance |
Hazem |
Abolrous |
2009-02-28 |
NULL |
Quality Assurance Manager |
155 |
Shipping and Receiving |
Pilar |
Ackerman |
2009-01-02 |
NULL |
Shipping and Receiving Supervisor |
156 |
Produktion |
Jay |
Adams |
2009-03-05 |
NULL |
Production Technician – WC60 |
154 |
Information Services |
François |
Ajenstat |
2009-01-17 |
NULL |
Database Administrator |
156 |
Sales |
Amy |
Alberts |
2012-04-16 |
NULL |
European Sales Manager |
117 |
Produktion |
Greg |
Alderson |
2008-12-02 |
NULL |
Production Technician – WC45 |
157 |
Quality Assurance |
Sean |
Alexander |
2008-12-28 |
NULL |
Quality Assurance Technician |
157 |
Facilities and Maintenance |
Gary |
Altman |
2009-12-02 |
NULL |
Facilities Manager |
145 |
Mehrere RETURN-Klauseln¶
Im folgenden Beispiel gibt es mehr als eine Klausel, da es je nach Situation nicht notwendig ist, die gesamte Funktion auszuführen.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnis¶
TYPE |
NAME |
|---|---|
SMALL_TEAM |
TEAM1 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnis¶
TYPE |
NAME |
|---|---|
SMALL_TEAM |
TEAM1 |
Warnung
Diese Transformation wird angewendet, wenn nur ein Wert eingefügt werden soll. Bei mehr als einem Wert müssen Sie eine gespeicherte Prozedur verwenden.
Komplexe Fälle¶
Das Beispiel ist ein komplexer Fall, der verschachtelte if-Anweisungen verwendet und einen Wert abhängig von der Bedingung „true“ einfügt.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnis¶
VACATION_STATUS |
|---|
OK |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Zweiter Tab¶
VACATION_STATUS |
|---|
OK |
Bekannte Probleme¶
WHILE-Anweisungen in Verbindung mit Abfragen¶
Das Problem bei diesem Beispiel ist, dass es keine Möglichkeit gibt, die WHILE-Anweisung innerhalb der WITH-Klausel des Haupt-Select in eine CTE umzuwandeln. Dadurch sind wir gezwungen, diese Anweisung in eine gespeicherte Prozedur umzuwandeln, um die gleiche Logik zu erhalten.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnis¶
GROUP_NAME |
|---|
Tool Design |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnis¶
GROUP_NAME |
|---|
Tool Design |
Cursor deklarieren¶
Benutzerdefinierte Funktionen können DECLARE, OPEN, FETCH, CLOSE oder DEALLOCATE für einen CURSOR nicht verwenden. Verwenden Sie eine gespeicherte Prozedur, um mit Cursors zu arbeiten.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnis¶
AMOUNT |
|---|
3 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnis¶
AMOUNT |
|---|
3 |
Verschiedene Anweisungen werden in allgemeinen Tabellenausdrücken nicht unterstützt¶
Die Klauseln UPDATE, INSERT, DELETE, ALTER oder DROP werden im Body von allgemeinen Tabellenausdrücken nicht unterstützt, auch nicht nach ihrer Deklaration mit einem Delimitator. Aus diesem Grund kann die Funktion so geändert werden, dass sie als gespeicherte Prozedur funktioniert.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnis¶
PRODUCT_NAME |
Bewertung |
|---|---|
HL Mountain Pedal |
3 |
Mountain Bike Socks, M |
5 |
Road-550-W Yellow, 40 |
5 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Ergebnis¶
PRODUCT_NAME |
Bewertung |
|---|---|
HL Mountain Pedal |
3 |
Mountain Bike Socks, M |
5 |
Road-550-W Yellow, 40 |
5 |
Zugehörige EWIs¶
SSC-EWI-0040: Anweisung nicht unterstützt.#x20;
[SSC-EWI-0073](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend
SCALAR¶
Übersetzungsreferenz zur Konvertierung von Transact-SQL UDF (benutzerdefinierten Funktionen) mit dem „scalar“-Rückgabetyp an Snowflake.
Applies to
SQL Server
Azure Synapse Analytics
Beschreibung¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Eine benutzerdefinierte Skalarfunktion ist eine Transact-SQL- oder Common Language Runtime(CLR)-Routine, die Parameter akzeptiert, eine Aktion ausführt, z. B. eine komplexe Berechnung, und das Ergebnis dieser Aktion als Skalarwert zurückgibt. (SQL Server-Sprachreferenz – Unterabschnitt ReferenceCREATE FUNCTION).
Bemerkung
Diese Funktionen werden in der Regel innerhalb der Anweisung SELECToder bei der Einrichtung einer einzelnen Variablen (höchstwahrscheinlich innerhalb einer gespeicherten Prozedur) verwendet.
Transact-SQL-Syntax¶
Snowflake-Syntax¶
Snowflake erlaubt 3 verschiedene Sprachen in den benutzerdefinierten Funktionen:
SQL
JavaScript
Java
Vorerst unterstützt SnowConvert AI nur SQL und JavaScript als Zielsprachen.
SQL¶
Bemerkung
Benutzerdefinierte SQL-Funktionen unterstützen nur eine Abfrage als Body. Sie können aus der Datenbank lesen, aber nicht schreiben oder verändern. (Referenz zu skalaren SQL UDFs).
JavaScript¶
Bemerkung
Benutzerdefinierte JavaScript-Funktionen erlauben mehrere Anweisungen in ihren Bodys, können aber keine Abfragen an die Datenbank durchführen. (Referenz zu skalaren JavaScript UDFs)
Beispielhafte Quellcode-Muster¶
SET- und DECLARE-Anweisungen¶
Die häufigsten Anweisungen in Funktions-Bodys sind die Anweisungen DECLARE und SET. Bei DECLARE-Anweisungen ohne Standardwert wird die Transformation ignoriert. SET-Anweisungen und DECLARE-Anweisungen mit einem Standardwert werden in COMMON TABLE EXPRESSION umgewandelt. Jeder gemeinsame Tabellenausdruck enthält eine Spalte, die den Wert der lokalen Variablen darstellt.
Transact-SQL¶
Abfrage¶
Ergebnis¶
vendor_name |
|---|
Australia Bike Retailer |
Snowflake¶
Abfrage¶
Ergebnis¶
VENDOR_NAME |
|---|
Australia Bike Retailer |
Transformation von IF/ELSE-Anweisung¶
IF/ELSE-Anweisungen können auf unterschiedliche Weise gehandhabt werden. Sie können entweder in Javascript oder in SQL transformiert werden, indem die CASE EXPRESSION innerhalb der SELECT-Anweisung die Bedingungen innerhalb der Abfragen zulässt. Während die Transformation in Javascript ziemlich einfach ist, ist die CASE-Anweisung auf den ersten Blick vielleicht nicht so offensichtlich.
Transact-SQL¶
Abfrage¶
Ergebnis¶
has_active_flag |
|---|
NO |
Snowflake¶
Abfrage¶
Ergebnis¶
HAS_ACTIVE_FLAG |
|---|
NO |
NESTED-Anweisungen¶
For nested statements, the structured programming is being transformed to a single query. The statements in the control-of-flow are going to be nested in table structures to preserve the execution order.
Bemerkung
CASE EXPRESSIONS kann nur einen Wert pro Anweisung zurückgeben
Beispiel¶
Bemerkung
Der folgende Code ist in beiden Programmierparadigmen funktional gleichwertig.
Strukturierte Programmierung¶
SQL¶
Ergebnis¶
AccountNumber |
|---|
LITWARE0001 |
Bedingte Variablen durch SELECTs¶
Die Definition und Zuweisung von Variablen innerhalb von bedingten Anweisungen ist tendenziell etwas problematisch, da Verweise auf die Variable weiter unten im Code wissen müssten, wo die Variable zuletzt geändert wurde. Und nicht nur das: Wenn der Verweis innerhalb einer anderen bedingten Anweisung steht, müsste es eine Art Umleitung geben, die auf die vorherige bekannte Zuweisung an die Variable verweist.
Verschärft wird dies alles noch durch Verschachtelungen und komplexe Abfragen im Eingabecode. Aus diesem Grund wird ein bestimmter EWI hinzugefügt, wenn diese Muster gefunden werden.
Im folgenden Szenario kann die erste IF-Anweisung ohne Probleme umgewandelt werden, da der Inhalt einfach genug ist. Die zweite und dritte IF-Anweisung sind auskommentiert, weil sie derzeit nicht unterstützt werden, da es andere Anweisungen als Variablenzuweisungen durch SELECT gibt.
SQL Server¶
Abfrage¶
Ergebnis¶
RESULT |
|---|
10 |
Snowflake¶
Abfrage¶
Ergebnis¶
RESULT |
|---|
10 |
Eine Variable zuweisen und zurückgeben¶
In this simple pattern, there is a variable declaration, then, that variable is set using a SELECT statement and finally returned. This is going to be migrated to a Common Table Expression to keep the original behavior.
SQL Server¶
Abfrage¶
Ergebnis¶
Ergebnis |
|---|
1583978.2263 |
Snowflake¶
Abfrage¶
Ergebnis¶
RESULT |
|---|
1583978.2263 |
Aufrufe mehrerer Funktionen¶
Für dieses spezielle Muster gibt es keine offensichtlichen Abfragen, aber es gibt mehrere Aufrufe mehrerer Funktionen, die mit derselben Variable arbeiten und sie am Ende zurückgeben. Da Snowflake nur Abfragen innerhalb seiner Funktionen unterstützt, besteht die Lösung für diesen Block darin, ihn zu einem Select hinzuzufügen und die Aufrufe darin zu verschachteln, wobei sicherzustellen ist, dass der Rückgabewert mit dem der Quelle übereinstimmt.
SQL Server¶
Abfrage¶
Ergebnis¶
Name |
|---|
USA Car Retailer |
Snowflake¶
Abfrage¶
Ergebnis¶
NAME |
|---|
USA Car Retailer |
Eine Variable basierend auf mehreren IF Bedingungen erhöhen und ihren Wert zurückgeben¶
Bei diesem Muster wird eine Variable durch mehrere IF-Bedingungen verändert (in diesem Fall erhöht). Zu Beginn wird ein Satz von Variablen initialisiert und verwendet, um zu bestimmen, ob die Ergebnisvariable erhöht werden soll oder nicht. Schließlich wird die Ergebnisvariable zurückgegeben.
SQL Server¶
Abfrage¶
Ergebnis¶
Ergebnis |
|---|
473.1415 |
Snowflake¶
Abfrage¶
Ergebnis¶
RESULT |
|---|
473.1415 |
Zwei oder mehrere RETURN-Anweisungen¶
Bei diesem Muster wird der IF-Block, der die RETURN-Klausel enthält, die den Codefluss unterbricht, am Ende des Bodys hinzugefügt, wie die letzte auszuführende Anweisung in einem CASE-Ausdruck.
Grundlegender Fall¶
In diesem speziellen Szenario gibt es keine Logik zwischen der bedingten RETURN-Anweisung und der abschließenden RETURN-Anweisung, so dass der gesamte Text-Bodys einem einzigen CASE EXPRESSION zugeordnet wird.
SQL Server¶
Abfrage¶
Ergebnis¶
result |
|---|
1 |
Snowflake¶
Abfrage¶
Ergebnis¶
RESULT |
|---|
1 |
Allgemeine Tabellenausdrücke¶
Common table expressions will be kept as in the original code, and they are going to be concatenated with the generated ones. SnowConvert AI is able to identify first all the original COMMON TABLE EXPRESSION names to avoid generating duplicated names.
SQL Server¶
Abfrage¶
Ergebnis¶
result |
|---|
3689 |
Snowflake¶
Abfrage¶
Ergebnis¶
RESULT |
|---|
3689 |
In JavaScript UDFs umwandeln¶
Wenn es mehrere Anweisungen gibt und die Funktion in keiner Weise auf die Datenbank zugreift, kann sie unter Beibehaltung der Funktionsäquivalenz in eine JavaScript-Funktion umgewandelt werden
SQL Server¶
Abfrage 1¶
Abfrage 2¶
Ergebnis 1¶
DATE |
|---|
2021 |
Ergebnis 2¶
CleanChargeCode |
|---|
16 |
Snowflake¶
Abfrage 1¶
Abfrage 2¶
Ergebnis 1¶
DATE |
|---|
2021.0 |
Ergebnis 2¶
CLEANCHARGECODE |
|---|
16 |
Bekannte Probleme¶
Warnung
Benutzerdefinierte Funktionen können nicht verwendet werden, um Aktionen durchzuführen, die den Zustand der Datenbank verändern
Warnung
Benutzerdefinierte Funktionen können keine OUTPUT INTO- Klausel enthalten, die eine Tabelle als Ziel hat
Warnung
Benutzerdefinierte Funktionen können DECLARE, OPEN, FETCH, CLOSE oder DEALLOCATE für einen CURSOR nicht verwenden. Verwenden Sie eine gespeicherte Prozedur, wenn Sie Cursors verwenden müssen.
Warnung
Benutzerdefinierte Funktionen können keine CONTROL-OF-FLOW-Anweisungen wie WHILE ausführen, wenn es mindestens einen Aufruf an die Datenbank gibt
Warnung
Benutzerdefinierte Funktionen mit Referenzen auf andere benutzerdefinierte Funktionen, die in gespeicherte Prozeduren umgewandelt wurden, werden ebenfalls in Prozeduren umgewandelt.
Warnung
User-defined functions that use @@ROWCOUNT are not supported in SQL and should be transformed to stored procedures to keep the functional equivalence.
Warnung
Benutzerdefinierte Funktionen mit SELECT Anweisungen, die sich selbst eine Variable zuweisen, werden in Snowflake nicht unterstützt. Siehe auch SELECT @local_variable
Für alle nicht unterstützten Fälle prüfen Sie bitte die entsprechenden EWIs und die unten stehenden Muster, um Empfehlungen und mögliche Umgehungslösungen zu erhalten.
Andere Bedingungen als IF/ELSE-Anweisungen neben Abfragen¶
Das nächste Szenario beinhaltet die Verwendung der „WHILE-Anweisung“ zusammen mit anderen Abfragen. Das Problem bei diesem Beispiel ist, dass es keine Möglichkeit gibt, die WHILE-Anweisung innerhalb der WITH-Klausel des Haupt-Select in eine CTE umzuwandeln. Dadurch sind wir gezwungen, diese Anweisung in eine JavaScript-Prozedur umzuwandeln, um die gleiche Logik zu erhalten.
SQL Server¶
Abfrage¶
Ergebnis¶
result |
|---|
1007 |
Snowflake
Abfrage¶
Ergebnis¶
FOO |
|---|
1007 |
Zuweisung einer Variablen unter Verwendung ihres eigenen Werts bei der Iteration durch einen Rowset¶
In the following example, the variable @names is used to concatenate multiple values from a column into one single string. The variable is updated on each iteration as shown, which is not supported by Snowflake UDFs. For this scenario, the function should be transformed into a procedure.
SQL Server
Abfrage¶
Ergebnis¶
names |
|---|
Australia Bike Retailer Allenson Cycles Advanced Bicycles Trikes, Inc. Morgan Bike Accessories Cycling Master Chicago Rent-All Greenwood Athletic Company Compete Enterprises, Inc International Light Speed Training Systems Gardner Touring Cycles Internati |
Snowflake-Abfrage
Warnung
Beachten Sie bei den oben beschriebenen Szenarien die folgenden Beschränkungen:
Alle Aufrufe von benutzerdefinierten Funktionen in DML-Abfragen wie
SELECT,INSERT,DELETE,UPDATEoderMERGEwerden fehlschlagen, da Aufrufe von gespeicherten Prozeduren in diesen Abfragen nicht erlaubt sind.Aufrufen von benutzerdefinierten Funktionen innerhalb von Prozeduren sollte das Schlüsselwort
CALLvorangestellt werden.User-defined functions used in COMPUTED COLUMNS will fail during the execution.
Zugehörige EWIs¶
[SSC-EWI-0067](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0067): UDF wurde in eine Snowflake-Prozedur umgewandelt, der Aufruf von Prozeduren innerhalb einer Abfrage wird nicht unterstützt.
SSC-EWI-0068: Die benutzerdefinierte Funktion wurde in eine Snowflake-Prozedur umgewandelt.
[SSC-EWI-0073](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.
UDF für Snowflake-Skript (SCALAR)¶
Übersetzungsreferenz für benutzerdefinierte SQL Server-Skalarfunktionen für Snowflake Scripting UDFs
Applies to
SQL Server
Azure Synapse Analytics
Beschreibung¶
SnowConvert unterstützt die Übersetzung von benutzerdefinierten SQL Server-Sklalarfunktionen direkt in Snowflake Scripting UDFs (SnowScript UDFs), wenn sie bestimmte Kriterien erfüllen, anstatt alle Funktionen in gespeicherte Prozeduren zu konvertieren.
Snowflake Scripting UDFs sind benutzerdefinierte Funktionen, die mit Snowflakes prozeduraler Sprachsyntax (SnowScript) innerhalb eines SQL UDF-Textkörpers geschrieben wurden. Sie unterstützen Variablen, Schleifen, bedingte Logik und die Ausnahmebehandlung.
Wenn Funktionen zu SnowScript UDFs werden¶
SnowConvert analysiert jeden SQL Server-Funktion und ermittelt automatisch das entsprechende Snowflake-Ziel. Eine Funktion wird zu einer SnowScript UDF, wenn sie nur prozedurale Logik ohne Datenzugriffsoperationen enthält.
Beispielhafte Quellcode-Muster¶
Einfache Berechnungsfunktion¶
Eine einfache Skalarfunktion, die Berechnungen durchführt, ohne Daten abzufragen.
SQL Server¶
Ergebnis¶
Profit |
|---|
50,00 |
Snowflake (SnowScript UDF)¶
Ergebnis¶
PROFIT |
|---|
50,00 |
Funktion mit bedingter Logik (IF/ELSE)¶
Funktionen mit IF/ELSE-Anweisungen für Geschäftslogik.
SQL Server¶
Ergebnis¶
DiscountRate |
|---|
0.20 |
Snowflake (SnowScript UDF)¶
Ergebnis¶
DISCOUNTRATE |
|---|
0.20 |
Funktion mit WHILE-Schleife¶
Funktionen mit WHILE-Schleifen für iterative Berechnungen.
SQL Server¶
Ergebnis¶
FactorialResult |
|---|
120 |
Snowflake (SnowScript UDF)¶
Ergebnis¶
FACTORIALRESULT |
|---|
120 |
Zeichenfolgenbearbeitungsfunktion¶
Komplexe Zeichenfolgenoperationen mit Schleifen und bedingter Logik.
SQL Server¶
Ergebnis¶
CleanPhone |
|---|
5551234567 |
Snowflake (SnowScript UDF)¶
Ergebnis¶
CLEANPHONE |
|---|
5551234567 |
CASE-Anweisungslogik¶
Funktionen mit CASE-Ausdrücke zur Kategorisierung.
SQL Server¶
Ergebnis¶
Grade |
|---|
B |
Snowflake (SnowScript UDF)¶
Ergebnis¶
GRADE |
|---|
B |
Select Into variable assignment¶
Functions using simple select into for variable assignment.
SQL Server¶
Ergebnis¶
CALCULATEPRICE(100, 3) |
|---|
285 |
Snowflake (SnowScript UDF)¶
Ergebnis¶
CALCULATEPRICE(100, 3) |
|---|
285 |
Bekannte Probleme¶
Warnung
SnowConvert AI will not translate UDFs containing the following elements into SnowScripting UDFs, as these features are unsupported in SnowScripting UDFs:
Auf Datenbanktabellen zugreifen
Cursor verwenden
Andere UDFs aufrufen
Aggregat- oder Fensterfunktionen enthalten
DML-Operationen (INSERT/UPDATE/DELETE) ausführen
Resultsets zurückgeben
Zugehörige EWIs¶
[SSC-EWI-0067](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0067): UDF wurde in eine Snowflake-Prozedur umgewandelt, der Aufruf von Prozeduren innerhalb einer Abfrage wird nicht unterstützt.
SSC-EWI-0068: Die benutzerdefinierte Funktion wurde in eine Snowflake-Prozedur umgewandelt.
[SSC-EWI-0073](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0073): Überprüfung der Funktionsäquivalenz ausstehend.