SnowConvert AI - Serveur SQL - CREATE FUNCTION¶
Référence de traduction pour les fonctions définies par l’utilisateur Transact-SQL
Applies to
SQL Server
Azure Synapse Analytics
Description¶
SQL Server ne prend en charge que deux types de fonctions définies par l’utilisateur :
À partir de ces types d’UDFs, il est possible de les sous-catégoriser en simples et complexes, selon la logique interne.
UDFs simples, fait correspondre la syntaxe du serveur SQL à la syntaxe de Snowflake. Ce type n’ajoute aucune logique et va directement au résultat. Ils correspondent généralement aux SQL UDFs de Snowflake. SnowConvert prend en charge la traduction des fonctions d’utilisateur scalaires du serveur SQL directement vers les UDFs Exécution de scripts Snowflake lorsqu’ils répondent à des critères spécifiques.\ \ UDFs complexes, fait un usage courant d’une instruction particulière (INSERT, DELETE, UPDATE, SET, DECLARE, etc) or control-of-flow blocks (IF…ELSE, WHILE, etc) et représente généralement une erreur de correspondance ou une violation de la définition des SQL UDFs de Snowflake.
Limitations¶
Les UDFs Transact présentent certaines limites qui ne sont pas présentes dans d’autres moteurs de base de données (comme Oracle et Teradata). Ces limites facilitent les traductions en réduisant le champ d’application de l’échec. Cela signifie qu’il existe des scénarios spécifiques que nous pouvons espérer éviter.
Voici quelques-unes des limites de SQL Server applicables aux UDFs
Les UDFs ne peuvent pas être utilisées pour effectuer des actions qui modifient l’état de la base de données
Les fonctions définies par l’utilisateur ne peuvent pas contenir de clause OUTPUT INTO ayant une table pour cible
Les fonctions définies par l’utilisateur ne peuvent pas renvoyer plusieurs jeux de résultats. Utilisez une procédure stockée si vous devez renvoyer plusieurs jeux de résultats.
Pour obtenir la liste complète, consultez le lien Créer des fonctions définies par l’utilisateur (moteur de base de données)
INLINE TABLE-VALUED¶
Référence de traduction pour convertir une UDF Transact-SQL (Fonctions définies par l’utilisateur) avec type de retour TABLE vers Snowflake.
Applies to
SQL Server
Azure Synapse Analytics
Description¶
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Les fonctions en ligne à valeur de table sont des expressions de table qui peuvent accepter des paramètres, exécuter une instruction SELECT et renvoyer une TABLE (Référence linguistique SQL Server Création d’une fonction à valeur de table intégrée.)
Syntaxe Transact¶
Syntaxe Snowflake SQL¶
Modèles d’échantillons de sources¶
La section suivante décrit tous les modèles de code source pouvant apparaître dans ce type de syntaxe CREATE FUNCTION.
Pour les fonctions en ligne à valeur de table, il ne peut y avoir qu’une seule instruction par corps qui puisse être :
Instruction
SELECTExpression de table commune
WITH
Sélectionner et retourner des valeurs directement à partir d’une table¶
Il s’agit du scénario le plus simple, qui consiste à effectuer une simple sélection dans une table et à renvoyer les valeurs correspondantes
Transact-SQL¶
Valeur de table en ligne¶
Résultat¶
DepartmentID |
Nom |
GroupName |
|---|---|---|
1 |
Engineering |
Recherche et développement |
2 |
Conception d’outils |
Recherche et développement |
3 |
Sales |
Ventes et marketing |
4 |
Marketing |
Ventes et marketing |
5 |
Achats |
Gestion des stocks |
6 |
Recherche et développement |
Recherche et développement |
7 |
Production |
Fabrication |
8 |
Contrôle de la production |
Fabrication |
9 |
Ressources humaines |
Exécution générale et administration |
10 |
Finances |
Exécution générale et administration |
11 |
Services d’information |
Exécution générale et administration |
12 |
Contrôle des documents |
Assurance qualité |
13 |
Assurance qualité |
Assurance qualité |
14 |
Installations et entretien |
Exécution générale et administration |
15 |
Expédition et réception |
Gestion des stocks |
16 |
Exécution |
Exécution générale et administration |
Snowflake SQL¶
Valeur de table en ligne¶
Résultat¶
DepartmentID |
Nom |
GroupName |
|---|---|---|
1 |
Engineering |
Recherche et développement |
2 |
Conception d’outils |
Recherche et développement |
3 |
Sales |
Ventes et marketing |
4 |
Marketing |
Ventes et marketing |
5 |
Achats |
Gestion des stocks |
6 |
Recherche et développement |
Recherche et développement |
7 |
Production |
Fabrication |
8 |
Contrôle de la production |
Fabrication |
9 |
Ressources humaines |
Exécution générale et administration |
10 |
Finances |
Exécution générale et administration |
11 |
Services d’information |
Exécution générale et administration |
12 |
Contrôle des documents |
Assurance qualité |
13 |
Assurance qualité |
Assurance qualité |
14 |
Installations et entretien |
Exécution générale et administration |
15 |
Expédition et réception |
Gestion des stocks |
16 |
Exécution |
Exécution générale et administration |
Sélectionner et retourner des valeurs à partir de plusieurs tables en renommant les colonnes et en utilisant des fonctions intégrées¶
Voici un exemple de requête utilisant des fonctions intégrées dans une instruction Select pour obtenir des données de différentes tables, renommer les colonnes et renvoyer une table.
Transact-SQL¶
Valeur de table en ligne¶
Résultat¶
PersonType |
FirstName |
JobTitle |
Sexe |
HIREYEAR |
|---|---|---|---|---|
EM |
Ken |
Directeur général |
M |
2009 |
EM |
Terri |
Vice-président de l’ingénierie |
F |
2008 |
EM |
Roberto |
Directeur de l’ingénierie |
M |
2007 |
EM |
Rob |
Concepteur d’outils en chef |
M |
2007 |
EM |
Gail |
Ingénieur conception |
F |
2008 |
EM |
Jossef |
Ingénieur conception |
M |
2008 |
EM |
Dylan |
Directeur de la recherche et du développement |
M |
2009 |
EM |
Diane |
Ingénieur Recherche et Développement |
F |
2008 |
EM |
Gigi |
Ingénieur Recherche et Développement |
F |
2009 |
EM |
Michael |
Directeur de la recherche et du développement |
M |
2009 |
EM |
Ovidiu |
Concepteur d’outils en chef |
M |
2010 |
EM |
Thierry |
Créateur d’outils |
M |
2007 |
EM |
Janice |
Créateur d’outils |
F |
2010 |
EM |
Michael |
Ingénieur conception |
M |
2010 |
EM |
Sharon |
Ingénieur conception |
F |
2011 |
EM |
David |
Directeur du marketing |
M |
2007 |
EM |
Kevin |
Assistant marketing |
M |
2007 |
EM |
John |
Spécialiste marketing |
M |
2011 |
EM |
Mary |
Assistant marketing |
F |
2011 |
EM |
Wanida |
Assistant marketing |
F |
2011 |
Snowflake SQL¶
Valeur de table en ligne¶
Résultat¶
PersonType |
FirstName |
JobTitle |
Sexe |
HIREYEAR |
|---|---|---|---|---|
EM |
Ken |
Directeur général |
M |
2009 |
EM |
Terri |
Vice-président de l’ingénierie |
F |
2008 |
EM |
Roberto |
Directeur de l’ingénierie |
M |
2007 |
EM |
Rob |
Concepteur d’outils en chef |
M |
2007 |
EM |
Gail |
Ingénieur conception |
F |
2008 |
EM |
Jossef |
Ingénieur conception |
M |
2008 |
EM |
Dylan |
Directeur de la recherche et du développement |
M |
2009 |
EM |
Diane |
Ingénieur Recherche et Développement |
F |
2008 |
EM |
Gigi |
Ingénieur Recherche et Développement |
F |
2009 |
EM |
Michael |
Directeur de la recherche et du développement |
M |
2009 |
EM |
Ovidiu |
Concepteur d’outils en chef |
M |
2010 |
EM |
Thierry |
Créateur d’outils |
M |
2007 |
EM |
Janice |
Créateur d’outils |
F |
2010 |
EM |
Michael |
Ingénieur conception |
M |
2010 |
EM |
Sharon |
Ingénieur conception |
F |
2011 |
EM |
David |
Directeur du marketing |
M |
2007 |
EM |
Kevin |
Assistant marketing |
M |
2007 |
EM |
John |
Spécialiste marketing |
M |
2011 |
EM |
Mary |
Assistant marketing |
F |
2011 |
EM |
Wanida |
Assistant marketing |
F |
2011 |
Sélectionnez des colonnes à l’aide de l’instruction WITH¶
Le corps d’une fonction à valeur de table intégrée peut également être spécifié à l’aide d’une instruction WITH, comme indiqué ci-dessous.
Transact-SQL¶
Valeur de table en ligne¶
Résultat¶
MaritalStatus |
Sexe |
Nom |
|---|---|---|
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 |
Loren Line |
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¶
Valeur de table en ligne¶
Résultat¶
MaritalStatus |
Sexe |
Nom |
|---|---|---|
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 |
Loren Line |
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 |
Problèmes connus¶
Aucun problème n’a été trouvé
MULTI-STATEMENT TABLE-VALUED¶
Référence de traduction pour convertir une UDF Transact-SQL (Fonctions définies par l’utilisateur) avec type de retour TABLE vers Snowflake.
Applies to
SQL Server
Azure Synapse Analytics
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Note
Tous les exemples de code de cette page n’ont pas encore été implémentés dans SnowConvert AI. Ils doivent être interprétés comme une référence pour la manière dont chaque scénario doit être traduit dans Snowflake. Ces traductions peuvent changer à l’avenir. Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
La valeur de table multi-instructions est similaire à la valeur de table des instructions en ligne (INLINE TABLE-VALUED). Cependant, les valeurs de table multi-instructions peuvent avoir plusieurs instructions dans son corps de fonction, les colonnes de la table sont spécifiées dans le type de retour et il a un bloc BEGIN/END (Référence du langage du serveur SQL créant une fonction à valeur de table multi-instructions
Syntaxe Transact-SQL¶
Snowflake SQL¶
Modèles d’échantillons de sources¶
La section suivante décrit tous les modèles de code source possibles qui peuvent apparaître dans ce type de syntaxe ofCREATE FUNCTION.
Le corps de la fonction à valeur de table multi-instructions doit être une instruction SELECT. C’est pourquoi les autres instructions doivent être appelées séparément.
Insérer des valeurs dans une table¶
Insère une ou plusieurs lignes dans la table et renvoie la table avec les nouvelles valeurs
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Résultat¶
BEHAVIORAL_SEGMENT |
|---|
Inconnu |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Résultats¶
BEHAVIORAL_SEGMENT |
|---|
Inconnu |
Insérer une valeur en fonction de l’instruction if/else¶
Insère une ligne dans la table conformément à la condition et renvoie la table avec la nouvelle valeur
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Résultat¶
NUMBER_TYPE |
|---|
Impair |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Résultat¶
NUMBER_TYPE |
|---|
Impair |
Insère plusieurs éléments en fonction de l’instruction if/else¶
L’exemple ci-dessous insère plusieurs valeurs dans la table et plusieurs variables sont modifiées en fonction de la condition. Renvoie la table contenant les nouvelles valeurs
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Résultat¶
ID_EMPLOYEE |
WORKING_FROM_HOME |
TEAM |
COMPUTER |
|---|---|---|---|
123456789 |
1 |
TEAM_1 |
LAPTOP |
Snowflake¶
MULTI-STATEMENT TABLE-VALUED¶
Résultat¶
ID_EMPLOYEE |
WORKING_FROM_HOME |
TEAM |
COMPUTER |
|---|---|---|---|
123456789 |
1 |
TEAM_1 |
LAPTOP |
Avertissement
Dans le cas d’instructions if imbriquées et si plusieurs variables sont modifiées dans les instructions, il est nécessaire d’utiliser une procédure stockée.
Mise à jour des valeurs précédemment insérées¶
Met à jour les valeurs des colonnes de la table dans le corps de la fonction et la renvoie avec les nouvelles valeurs.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Résultat¶
DEPARTMENT_NAME |
FIRST_NAME |
LAST_NAME |
START_DATE |
END_DATE |
JOB_TITLE |
MONTHS_WORKING |
|---|---|---|---|---|---|---|
Sales |
Syed |
Abbas |
2013-03-14 |
NULL |
Directeur des ventes Pacifique |
106 |
Production |
Kim |
Abercombie |
2010-01-16 |
NULL |
Technicienne de production - WC60 |
144 |
Assurance qualité |
Hazem |
Abolrous |
2009-02-28 |
NULL |
Manager de l’assurance qualité |
155 |
Expédition et réception |
Pilar |
Ackerman |
2009-01-02 |
NULL |
Supervision des livraisons et des réceptions |
156 |
Production |
Jay |
Adams |
2009-03-05 |
NULL |
Technicienne de production - WC60 |
154 |
Services d’information |
François |
Ajenstat |
2009-01-17 |
NULL |
Administrateur de la base de données |
156 |
Sales |
Amy |
Alberts |
2012-04-16 |
NULL |
Directrice des ventes européennes |
17 |
Production |
Greg |
Alderson |
2008-12-02 |
NULL |
Technicienne de production - WC45 |
157 |
Assurance qualité |
Sean |
Alexander |
2008-12-28 |
NULL |
Technicien d’assurance qualité |
157 |
Installations et entretien |
Gary |
Altman |
2009-12-02 |
NULL |
Gestionnaire des ressources |
145 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Résultat¶
DEPARTMENT_NAME |
FIRST_NAME |
LAST_NAME |
START_DATE |
END_DATE |
JOB_TITLE |
MONTHS_WORKING |
|---|---|---|---|---|---|---|
Sales |
Syed |
Abbas |
2013-03-14 |
NULL |
Directeur des ventes Pacifique |
106 |
Production |
Kim |
Abercombie |
2010-01-16 |
NULL |
Technicienne de production - WC60 |
144 |
Assurance qualité |
Hazem |
Abolrous |
2009-02-28 |
NULL |
Manager de l’assurance qualité |
155 |
Expédition et réception |
Pilar |
Ackerman |
2009-01-02 |
NULL |
Supervision des livraisons et des réceptions |
156 |
Production |
Jay |
Adams |
2009-03-05 |
NULL |
Technicienne de production - WC60 |
154 |
Services d’information |
François |
Ajenstat |
2009-01-17 |
NULL |
Administrateur de la base de données |
156 |
Sales |
Amy |
Alberts |
2012-04-16 |
NULL |
Directrice des ventes européennes |
17 |
Production |
Greg |
Alderson |
2008-12-02 |
NULL |
Technicienne de production - WC45 |
157 |
Assurance qualité |
Sean |
Alexander |
2008-12-28 |
NULL |
Technicien d’assurance qualité |
157 |
Installations et entretien |
Gary |
Altman |
2009-12-02 |
NULL |
Gestionnaire des ressources |
145 |
Clauses de retour multiples¶
Dans l’échantillon suivant, il y a plus d’une clause de retour, car selon la situation, il n’est pas nécessaire de continuer à exécuter toute la fonction.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Résultat¶
TYPE |
NAME |
|---|---|
SMALL_TEAM |
TEAM1 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Résultat¶
TYPE |
NAME |
|---|---|
SMALL_TEAM |
TEAM1 |
Avertissement
Cette transformation est appliquée lorsqu’il n’y a qu’une seule valeur à insérer. S’il y a plus d’une valeur, il est nécessaire d’utiliser une procédure stockée.
Cas complexes¶
L’exemple est un casse complexe qui utilise des instructions imbriquées if et insère une valeur en fonction de la condition true.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Résultat¶
VACATION_STATUS |
|---|
OK |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Deuxième onglet¶
VACATION_STATUS |
|---|
OK |
Problèmes connus¶
Instructions While avec requêtes en parallèle¶
Le problème de cet exemple est qu’il n’y a aucun moyen de transformer l’instruction while en CTE à l’intérieur de la clause WITH du select principal, ce qui nous oblige à transformer cette instruction en procédure stockée pour conserver la même logique.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Résultat¶
GROUP_NAME |
|---|
Conception d’outils |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Résultat¶
GROUP_NAME |
|---|
Conception d’outils |
Déclarer le curseur¶
Les fonctions définies par l’utilisateur ne peuvent pas DECLARE, OPEN, FETCH, CLOSE ou DEALLOCATE a CURSOR. Utilisez une procédure stockée pour travailler avec des curseurs.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Résultat¶
AMOUNT |
|---|
3 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Résultat¶
AMOUNT |
|---|
3 |
Les instructions différentes ne sont pas prises en charge dans les expressions de tables communes¶
Les clauses UPDATE, INSERT, DELETE, ALTER ou DROP ne sont pas prises en charge dans le corps des expressions de tables communes, même après leur déclaration à l’aide d’un délimiteur. C’est pourquoi la fonction peut être modifiée pour fonctionner comme une procédure stockée.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Résultat¶
PRODUCT_NAME |
Évaluation |
|---|---|
HL Mountain Pedal |
3 |
Mountain Bike Socks, M |
5 |
Road-550-W Yellow, 40 |
5 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Résultat¶
PRODUCT_NAME |
Évaluation |
|---|---|
HL Mountain Pedal |
3 |
Mountain Bike Socks, M |
5 |
Road-550-W Yellow, 40 |
5 |
EWIs connexes¶
SSC-EWI-0040 : Instruction non prise en charge.
SSC-EWI-0073 : En attente de l’examen de l’équivalence fonctionnelle
SCALAR¶
Référence de traduction pour convertir une UDF Transact-SQL (Fonctions définies par l’utilisateur) avec type de retour scalaire en Snowflake.
Applies to
SQL Server
Azure Synapse Analytics
Description¶
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Une fonction scalaire définie par l’utilisateur est une routine Transact-SQL ou de runtime de langage commun (CLR) qui accepte des paramètres, exécute une action, telle qu’un calcul complexe, et renvoie le résultat de cette action sous forme de valeur scalaire. (Sous-section ReferenceCREATE FUNCTION de langage de serveur SQL).
Note
Ces fonctions sont généralement utilisées dans l’instruction SELECT ou dans la configuration d’une seule variable (très probablement dans une procédure stockée).
Syntaxe Transact-SQL¶
Syntaxe Snowflake¶
Snowflake permet l’utilisation de 3 langues différentes dans les fonctions définies par l’utilisateur :
SQL
JavaScript
Java
Pour l’instant, SnowConvert AI prendra en charge uniquement SQL et JavaScript comme langages cibles.
SQL¶
Note
Les fonctions définies par l’utilisateur SQL n’acceptent qu’une seule requête comme corps. Elles peuvent lire la base de données, mais ne sont pas autorisées à l’écrire ou à la modifier. (Référence des UDFs SQL scalaires).
JavaScript¶
Note
Les fonctions définies par l’utilisateur JavaScript autorisent plusieurs instructions dans leur corps, mais ne peuvent pas effectuer de requêtes dans la base de données. (Référence des UDFs JavaScript scalaires)
Modèles d’échantillons de sources¶
Instructions Set et Declare¶
Les instructions les plus courantes dans les corps de fonctions sont les instructions DECLARE et SET. Pour les instructions DECLARE sans valeur par défaut, la transformation sera ignorée. Les instructions SET et DECLARE avec une valeur par défaut seront transformées en COMMON TABLE EXPRESSION. Chaque expression de table commune contiendra une colonne qui représente la valeur de la variable locale.
Transact-SQL¶
Requête¶
Résultat¶
vendor_name |
|---|
Australia Bike Retailer |
Snowflake¶
Requête¶
Résultat¶
VENDOR_NAME |
|---|
Australia Bike Retailer |
Transformation des instructions If/Else¶
Les instructions If/Else peuvent être traitées de différentes manières, elles peuvent être transformées en Javascript ou en SQL à l’aide de CASE EXPRESSION dans Select qui permet des conditionnels à l’intérieur des requêtes, alors que la transformation en Javascript est assez simple, l’instruction Case peut ne pas être si évidente à première vue.
Transact-SQL¶
Requête¶
Résultat¶
has_active_flag |
|---|
NO |
Snowflake¶
Requête¶
Résultat¶
HAS_ACTIVE_FLAG |
|---|
NO |
Instructions imbriquées¶
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.
Note
CASE EXPRESSIONS ne peut renvoyer qu’une seule valeur par instruction
Exemple¶
Note
Le code suivant est fonctionnellement équivalent dans les deux paradigmes de programmation.
Programmation structurée¶
SQL¶
Résultat¶
AccountNumber |
|---|
LITWARE0001 |
Variables conditionnelles via SELECTs¶
La définition et l’affectation de variables dans les instructions conditionnelles posent généralement des problèmes, car les références à la variable plus loin dans le code doivent savoir où la variable a été modifiée pour la dernière fois. De plus, si la référence se trouve à l’intérieur d’une autre instruction conditionnelle, il faudrait une sorte de redirection qui fasse référence à l’affectation précédente connue de la variable.
Le tout est aggravé par l’imbrication et les requêtes complexes qui peuvent être trouvées sur le code d’entrée. C’est pourquoi un EWI est ajouté lorsque ces modèles sont trouvés.
Dans le scénario suivant, la première instruction IF peut être transformée sans problème, car son contenu est assez simple. Les deuxième et troisième instructions IF sont commentées parce qu’elles ne sont pas prises en charge pour le moment, étant donné qu’il existe des instructions autres que les affectations de variables par le biais de SELECT.
SQL Server¶
Requête¶
Résultat¶
RESULT |
|---|
10 |
Snowflake¶
Requête¶
Résultat¶
RESULT |
|---|
10 |
Assigner et retourner une variable¶
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¶
Requête¶
Résultat¶
Résultat |
|---|
1583978.2263 |
Snowflake¶
Requête¶
Résultat¶
RESULT |
|---|
1583978.2263 |
Appels de fonctions multiples¶
Pour ce modèle spécifique, il n’y a pas de requêtes évidentes, mais il y a plusieurs appels à plusieurs fonctions travaillant sur la même variable et la renvoyant à la fin. Comme Snowflake ne prend en charge que les requêtes à l’intérieur de ses fonctions, la solution pour ce bloc va être de l’ajouter à un Select et d’imbriquer les appels à l’intérieur, en s’assurant que la valeur de retour est la même que celle de la source.
SQL Server¶
Requête¶
Résultat¶
Nom |
|---|
USA Car Retailer |
Snowflake¶
Requête¶
Résultat¶
NAME |
|---|
USA Car Retailer |
Augmenter une variable en fonction de plusieurs conditions IF et renvoyer sa valeur¶
Pour ce modèle, une variable est modifiée (augmentée dans le cas présent) à l’aide de plusieurs conditions IF. Au début, un jeu de résultats est initialisé et utilisé pour déterminer si la variable de résultat doit être augmentée ou non. Enfin, la variable de résultat est renvoyée.
SQL Server¶
Requête¶
Résultat¶
Résultat |
|---|
473.1415 |
Snowflake¶
Requête¶
Résultat¶
RESULT |
|---|
473.1415 |
Deux ou plusieurs instructions RETURN¶
Pour ce modèle, le bloc IF contenant la clause de retour qui interrompt le flux de code est ajouté à la fin du corps, comme la dernière instruction à exécuter dans une expression CASE.
Cas de base¶
Pour ce scénario particulier, il n’y a pas de logique entre l’instruction conditionnelle RETURN et l’instruction finale RETURN, de sorte que tous les corps seront mappés sur une seule CASE EXPRESSION.
SQL Server¶
Requête¶
Résultat¶
résultat |
|---|
1 |
Snowflake¶
Requête¶
Résultat¶
RESULT |
|---|
1 |
Expressions de table communes¶
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¶
Requête¶
Résultat¶
résultat |
|---|
3689 |
Snowflake¶
Requête¶
Résultat¶
RESULT |
|---|
3689 |
Transformer en UDFs JavaScript¶
S’il y a plusieurs instructions et que la fonction n’accède en aucune façon à la base de données, elle peut être transformée en une fonction JavaScript en conservant l’équivalence fonctionnelle
SQL Server¶
Requête 1¶
Requête 2¶
Résultat 1¶
DATE |
|---|
2021 |
Result 2¶
CleanChargeCode |
|---|
16 |
Snowflake¶
Requête 1¶
Requête 2¶
Résultat 1¶
DATE |
|---|
2021.0 |
Result 2¶
CLEANCHARGECODE |
|---|
16 |
Problèmes connus¶
Avertissement
Les fonctions définies par l’utilisateur ne peuvent pas être utilisées pour effectuer des actions qui modifient l’état de la base de données
Avertissement
Les fonctions définies par l’utilisateur ne peuvent pas contenir de clause OUTPUT INTO ayant une table pour cible
Avertissement
Les fonctions définies par l’utilisateur ne peuvent pas DECLARE, OPEN, FETCH, CLOSE ou DEALLOCATE a CURSOR. Utilisez une procédure stockée si vous devez utiliser des curseurs.
Avertissement
Les fonctions définies par l’utilisateur ne peuvent pas exécuter d’instructions de contrôle du flux, telles que WHILE, s’il y a au moins un appel à la base de données
Avertissement
Les fonctions définies par l’utilisateur qui contiennent des références à d’autres fonctions définies par l’utilisateur et qui ont été transformées en procédures stockées seront également transformées en procédures stockées.
Avertissement
User-defined functions that use @@ROWCOUNT are not supported in SQL and should be transformed to stored procedures to keep the functional equivalence.
Avertissement
Les fonctions définies par l’utilisateur qui ont des instructions SELECT assignant une variable à elle-même ne sont pas prises en charge dans Snowflake. Voir aussi SELECT @local_variable
Pour tous les cas non pris en charge, veuillez consulter les EWIs connexes et les modèles ci-dessous pour obtenir des recommandations et des solutions de contournement.
Conditionnelles autres que les instructions if/else en parallèle des requêtes¶
Le scénario suivant implique l’utilisation de l’instruction « while » en parallèle d’autres requêtes. Le problème de cet exemple est qu’il n’y a aucun moyen de transformer l’instruction while en CTE à l’intérieur de la clause WITH du select principal, ce qui nous oblige à transformer cette instruction en procédure JavaScript pour conserver la même logique.
SQL Server¶
Requête¶
Résultat¶
résultat |
|---|
1007 |
Snowflake
Requête¶
Résultat¶
FOO |
|---|
1007 |
Affectation d’une variable à l’aide de sa propre valeur en parcourant un jeu de lignes¶
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
Requête¶
Résultat¶
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 |
Requête Snowflake
Avertissement
Pour les scénarios décrits ci-dessus, tenez compte des limites suivantes :
Tous les appels aux fonctions définies par l’utilisateur dans les requêtes DML telles que
SELECT,INSERT,DELETE,UPDATEouMERGEéchoueront parce que les appels aux procédures stockées dans ces requêtes ne sont pas autorisés.Les appels à des fonctions définies par l’utilisateur à l’intérieur de procédures doivent être précédés du mot-clé
CALL.User-defined functions used in COMPUTED COLUMNS will fail during the execution.
EWIs connexes¶
SSC-EWI-0067 : UDF a été transformée en procédure Snowflake, l’appel de procédures à l’intérieur d’une requête n’est pas pris en charge.
SSC-EWI-0068 : La fonction définie par l’utilisateur a été transformée en procédure Snowflake.
SSC-EWI-0073 : En attente de l’examen de l’équivalence fonctionnelle.
Script Snowflake UDF (SCALAR)¶
Référence de traduction pour les fonctions scalaires définies par l’utilisateur du serveur SQL vers les UDFs Exécution de scripts Snowflake
Applies to
SQL Server
Azure Synapse Analytics
Description¶
SnowConvert prend en charge la traduction des fonctions scalaires définies par l’utilisateur du serveur SQL directement vers les UDFs Exécution de scripts Snowflake (SnowScript UDFs) lorsqu’elles répondent à des critères spécifiques, au lieu de convertir toutes les fonctions en procédures stockées.
Les UDFs Exécution de scripts Snowflake sont des fonctions définies par l’utilisateur écrites à l’aide de la syntaxe du langage procédural de Snowflake (Snowscript) au sein d’un corps SQL UDF. Elles prennent en charge les variables, les boucles, la logique conditionnelle et le traitement des exceptions.
Lorsque les fonctions deviennent des SnowScript UDFs¶
SnowConvert analyse chaque fonction de serveur SQL et détermine automatiquement la cible Snowflake appropriée. Une fonction devient une SnowScript UDF lorsqu’elle contient uniquement une logique procédurale sans opérations d’accès aux données.
Modèles d’échantillons de sources¶
Fonction de calcul simple¶
Une fonction scalaire de base qui effectue des calculs sans interroger de données.
SQL Server¶
Résultat¶
Bénéfice |
|---|
50,00 |
Snowflake (UDF SnowScript)¶
Résultat¶
PROFIT |
|---|
50,00 |
Fonction avec logique conditionnelle (IF/ELSE)¶
Fonctions utilisant les instructions IF/ELSE pour la logique métier.
SQL Server¶
Résultat¶
DiscountRate |
|---|
0.20 |
Snowflake (UDF SnowScript)¶
Résultat¶
DISCOUNTRATE |
|---|
0.20 |
Fonction avec boucle WHILE¶
Fonctions utilisant des boucles WHILE pour les calculs itératifs.
SQL Server¶
Résultat¶
FactorialResult |
|---|
120 |
Snowflake (UDF SnowScript)¶
Résultat¶
FACTORIALRESULT |
|---|
120 |
Fonction de manipulation des chaînes¶
Opérations de chaîne complexes utilisant des boucles et une logique conditionnelle.
SQL Server¶
Résultat¶
CleanPhone |
|---|
5551234567 |
Snowflake (UDF SnowScript)¶
Résultat¶
CLEANPHONE |
|---|
5551234567 |
Logique de l’instruction CASE¶
Fonctions utilisant les expressions CASE pour la catégorisation.
SQL Server¶
Résultat¶
Note |
|---|
B |
Snowflake (UDF SnowScript)¶
Résultat¶
GRADE |
|---|
B |
Select Into variable assignment¶
Functions using simple select into for variable assignment.
SQL Server¶
Résultat¶
CALCULATEPRICE(100, 3) |
|---|
285 |
Snowflake (UDF SnowScript)¶
Résultat¶
CALCULATEPRICE(100, 3) |
|---|
285 |
Problèmes connus¶
Avertissement
SnowConvert AI will not translate UDFs containing the following elements into SnowScripting UDFs, as these features are unsupported in SnowScripting UDFs:
Accéder aux tables de la base de données
Utiliser des curseurs
Appeler d’autres UDFs
Contenir des fonctions d’agrégation ou de fenêtre
Exécuter des opérations DML (INSERT/UPDATE/DELETE)
Renvoyer les jeux de résultats
EWIs connexes¶
SSC-EWI-0067 : UDF a été transformée en procédure Snowflake, l’appel de procédures à l’intérieur d’une requête n’est pas pris en charge.
SSC-EWI-0068 : La fonction définie par l’utilisateur a été transformée en procédure Snowflake.
SSC-EWI-0073 : En attente de l’examen de l’équivalence fonctionnelle.