SnowConvert AI - Serveur SQL-Azure Synapse - Éléments généraux du langage¶
Dans cette section, vous pouvez trouver des informations sur les instructions générales de Transact-SQL.
COLLATE¶
Applies to
SQL Server
Azure Synapse Analytics
La transformation du classement dépend de sa valeur, puisqu’il peut être pris en charge ou non.
Actuellement, voici les langues prises en charge pour la transformation, si elles se trouvent dans le classement, elles seront transformées en leur équivalent Snowflake.
SQL Server |
Snowflake |
|---|---|
Latin1_général |
EN |
Espagnol_moderne |
ES |
Français |
FR |
Si la langue n’est pas l’une des langues ci-dessus, le classement sera commenté.
The collate in SQL Server comes with additional specifications, such as CI, CS, AI, and AS. If there are additional specifications that are unsupported, they will be commented in the result.
Source¶
Valeur attendue¶
Voyons un exemple de classement dans un Create Table
Source¶
Valeur attendue¶
Comme vous pouvez le constater, la transformation du classement à l’intérieur d’un Select ou d’une Table est la même.
COMPUTED COLUMN¶
L’expression calculée n’a pas pu être transformée.
Applies to
SQL Server
Azure Synapse Analytics
Description¶
L’expression d’une colonne calculée n’a pas pu être transformée.
Exemple de code¶
Code d’entrée :¶
Code de sortie :¶
Recommandations¶
Ajoutez des modifications manuelles à l’expression non transformée.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
EWIs connexes¶
SSC-FDM-TS0014 : Colonne calculée transformée.
OUTER APPLY¶
Traduction de l’équivalence de l’instruction Outer Apply.
Applies to
SQL Server
Azure Synapse Analytics
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
Lorsque OUTER APPLY est spécifié, une ligne est produite pour chaque ligne du jeu de lignes de gauche, même si l’expression du jeu de lignes de droite renvoie un jeu de lignes vide pour cette ligne. (Définition OUTER APPLY)
Syntaxe¶
Équivalence Snowflake¶
Malgré l’instruction non prise en charge OUTER APPLY dans Snowflake, il existe une instruction équivalente, à savoir LATERAL. Par conséquent, la traduction de l’instruction est effectuée pour obtenir la même fonctionnalité par l’utilisation de solutions alternatives.
Néanmoins, l’instruction LATERAL dans Snowflake présente deux variantes de syntaxe. En fait, c’est la variante INNER JOIN LATERAL qui est utilisée dans cette traduction spécifique.
La grammaire INNER JOIN LATERAL de Snowflake est la suivante :
Note
<inline_view> ne doit pas être un nom de table.
L’instruction unique LATERAL est présentée ci-dessous :
Source de l’échantillon¶
L’exemple suivant montre une traduction générale entre OUTER APPLY et INNER JOIN LATERAL :
SQL Server¶
Sortie¶
p.ProjectName |
e.ProjectName |
FirstName |
|---|---|---|
Project A |
Project A |
John |
Project A |
Project A |
Jane |
Project A |
Project B |
Michael |
Project B |
Project A |
John |
Project B |
Project A |
Jane |
Project B |
Project B |
Michael |
Project C |
Project A |
John |
Project C |
Project A |
Jane |
Project C |
Project B |
Michael |
Snowflake¶
Sortie¶
PROJECTNAME |
PROJECTNAME_2 |
FIRSTNAME |
|---|---|---|
Project A |
Project A |
John |
Project A |
Project A |
Jane |
Project A |
Project B |
Michael |
Project B |
Project A |
John |
Project B |
Project A |
Jane |
Project B |
Project B |
Michael |
Project C |
Project A |
John |
Project C |
Project A |
Jane |
Project C |
Project B |
Michael |
Problèmes connus¶
La traduction étant une équivalence à partir de l’entrée, il existe certaines limites.
Les instructions TOP et WHERE peuvent être révisées pour un comportement optimal.
Un nom de corrélation à la fin de l’instruction peut être nécessaire. Dans Snowflake, la requête ne pose pas de problème si le nom de la corrélation ne figure pas dans la requête, mais la fonctionnalité peut changer et ne fait pas partie du modèle accepté dans SQL Server.
SQL Server¶
Sortie de la traduction¶
Les instructions spécifiques qui ne sont pas prises en charge peuvent faire l’objet d’un commentaire sur l’ensemble du code du bloc (exemple tiré de : Exemple JSON).
SQL Server¶
Sortie de la traduction¶
EWIs connexes¶
Pas d’EWIs connexes.
USE¶
Équivalent Snowflake de l’instruction USE Transact-SQL.
Applies to
SQL Server
L’instruction USE a son propre équivalent dans Snowflake. L’instruction sera traduite en instruction USE DATABASE dans Snowflake.
Exemples de traduction¶
Source¶
Sortie¶
Nom de la base de données¶
Le database name spécifié dans l’instruction USE peut être modifié s’il est placé entre crochets ([ ]). Le premier et le dernier crochet seront remplacés par des guillemets. Exemple :
Source¶
Sortie¶
Base de données définie par l’utilisateur¶
Si un utilisateur indique à l’outil de conversion un nom de base de données personnalisé à appliquer à tous les objets en utilisant le paramètre -d, et qu’il souhaite que les instructions USE soient transformées, le nom de la base de données doit être appliqué uniquement à l’instruction USE et non aux objets. Cette option remplace la base de données spécifiée dans l’instruction d’utilisation. Exemple :
Source¶
Sortie¶
Problèmes connus¶
Aucun problème n’a été constaté.
EWIs connexes¶
Pas d’EWIs connexes.
EXECUTE¶
Applies to
SQL Server
Azure Synapse Analytics
La traduction des instructions Exec ou Execute n’est pas prise en charge dans Snowflake, mais elle sera traduite en instruction CALL.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Entrée¶
Sortie¶
Pour plus d’informations sur la visite Exécution : Exécuter dans les procédures
PRINT¶
Applies to
SQL Server
Azure Synapse Analytics
L’instruction Print n’est pas directement prise en charge dans Snowflake, mais elle sera traduite à son équivalent le plus proche, la fonction intégrée SYSTEM$LOG_INFO.
Entrée¶
Sortie (dans SnowScript)¶
Sortie (en dehors de SnowScript)¶
Lorsque l’instruction Print est utilisée en dehors d’une procédure stockée, elle doit être appelée à partir d’un UDP SnowConvert AI.
Avant de commencer à enregistrer des messages, vous devez configurer une table d’événements. Pour plus d’informations, voir : Messages de journalisation dans Exécution de scripts Snowflake
Procédures stockées système¶
SP_EXECUTESQL¶
Spécification de traduction pour la procédure système SP_EXECUTESQL.
Applies to
SQL Server
Azure Synapse Analytics
Description¶
La procédure stockée du système SP_EXECUTESQL est utilisée pour exécuter une instruction ou un lot Transact-SQL qui peut être réutilisé plusieurs fois, ou qui est construit dynamiquement. L’instruction ou le lot peut contenir des paramètres intégrés.
Cette fonctionnalité peut être émulée dans Snowflake via l’instruction EXECUTE IMMEDIATE et avec une fonction définie par l’utilisateur (UDF) pour les paramètres intégrés.
Pour plus d’informations sur la fonction définie par l’utilisateur (UDF) utilisée pour cette traduction, consultez TRANSFORM_SP_EXECUTE_SQL_STRING_UDF(STRING, STRING, ARRAY, ARRAY).
Syntaxe¶
Transact¶
Modèles d’échantillons de sources¶
Tous les modèles transformeront SP_EXECUTESQL en instruction EXECUTE IMMEDIATE de Snowflake et ne modifieront la chaîne SQL à exécuter qu’en cas d’utilisation de paramètres intégrés.
Avertissement
SSC-EWI-0030 (Utilisation de Dynamic SQL) sera ajouté pour tous les modèles. Même si la traduction de SP_EXECUTESQL est équivalente à Snowflake, dans ce contexte, cette EWI indique que la chaîne SQL pourrait nécessiter des corrections manuelles pour que la traduction s’exécute comme prévu.
Données de configuration¶
Transact¶
Snowflake¶
Sans paramètres intégrés¶
Lorsqu’aucun paramètre intégré n’est utilisé, SP\EXECUTESQL est transformé en instruction EXECUTE IMMEDIATE et utilise la chaîne SQL sans modifications.
Transact¶
Résultats¶
Nom |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
Snowflake¶
Résultats¶
Nom |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
Avec des paramètres intégrés pour la liaison des données¶
Pour les paramètres intégrés pour la liaison de données, l’instruction SP_EXECUTESQL est transformé en instruction EXECUTE IMMEDIATE, et la chaîne SQL est modifiée par l’intermédiaire de TRANSFORM_SP_EXECUTE_SQL_STRING_UDF.
Le résultat de l’opération EXECUTE IMMEDIATE est affecté à la variable ProcedureResultSet et renvoyé ultérieurement sous la forme TABLE(ProcedureResultSet).
Transact¶
Résultats¶
Nom |
ID |
AGE |
|---|---|---|
John Doe |
2 |
21 |
Snowflake¶
Résultats¶
Nom |
ID |
AGE |
|---|---|---|
John Doe |
2 |
21 |
Avec paramètres intégrés OUTPUT¶
Pour les paramètres incorporés OUTPUT, SP_EXECUTESQL est transformé en instruction EXECUTE IMMEDIATE, et la chaîne SQL est modifiée par TRANSFORM_SP_EXECUTE_SQL_STRING_UDF.
En outre, SELECT $1, ..., $n INTO :outputParam1, ..., :outputParamN FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) est ajouté au résultat de chaque colonne au paramètre OUTPUT correspondant.
Avertissement
SSC-FDM-TS0028 est ajouté à l’instruction SELECT INTO. Il est essentiel que les paramètres de la clause INTO apparaissent dans le même ordre que celui dans lequel ils ont été attribués dans la chaîne originale SQL.
Dans le cas contraire, des modifications manuelles sont nécessaires pour répondre à cette exigence.
Transact¶
Résultats¶
<anonymous> |
|---|
32 |
Snowflake¶
Résultats¶
:MAXAGE::NUMBER(38,0) |
|---|
32 |
Avec les paramètres intégrés de OUTPUT et la liaison des données¶
La traduction est la même que pour les paramètres OUTPUT.
Transact¶
Résultats¶
<anonymous> |
<anonymous> |
|---|---|
24 |
4 |
Snowflake¶
Résultats¶
:MAXAGE::NUMBER(38,0) |
:MAXID::NUMBER(38,0) |
|---|---|
24 |
4 |
Paramètres non classés par ordre de définition¶
Ce modèle suit les mêmes règles que les modèles précédents. TRANSFORM_SP_EXECUTE_SQL_STRING_UDF remplace les valeurs des paramètres dans l’ordre correct.
Transact¶
Résultats¶
<anonymous> |
<anonymous> |
|---|---|
24 |
4 |
<anonymous> |
<anonymous> |
|---|---|
24 |
4 |
Snowflake¶
Résultats¶
:MAXAGE::NUMBER(38,0) |
:MAXID::NUMBER(38,0) |
|---|---|
24 |
4 |
:MAXAGE::NUMBER(38,0) |
:MAXID::NUMBER(38,0) |
|---|---|
24 |
4 |
Exécuter les valeurs directes¶
This translation also handles the cases where the values are directly assigned instead of using variables.
Transact¶
Résultats¶
<anonymous> |
<anonymous> |
|---|---|
24 |
4 |
Snowflake¶
Résultats¶
:MAXAGE::NUMBER(38,0) |
:MAXID::NUMBER(38,0) |
|---|---|
24 |
4 |
Chaîne SQL construite dynamiquement¶
Ce modèle suit les mêmes règles que les modèles précédents. Toutefois, l’affectation du résultat de l’instruction EXECUTE IMMEDIATE peut ne pas être ajoutée si la chaîne SQL n’est pas une simple requête unique avec ou sans paramètres intégrés.
En outre, la chaîne SQL doit commencer par la valeur littérale 'SELECT' pour que SnowConvert AI identifie correctement qu’une instruction SELECT va être exécutée.
Transact¶
Résultats¶
Nom |
ID |
AGE |
|---|---|---|
John Doe |
2 |
21 |
Snowflake¶
Résultats¶
Nom |
ID |
AGE |
|---|---|---|
John Doe |
2 |
21 |
Renvoi de plusieurs jeux de résultats¶
Les procédures de Snowflake Scripting ne permettent de renvoyer qu’un seul jeu de résultats par procédure.
Pour répliquer le comportement de Transact-SQL, lorsque deux ou plusieurs jeux de résultats doivent être renvoyés, ils sont stockés dans des tables temporaires. La procédure Snowflake Scripting renvoie un tableau contenant les noms des tables temporaires. Pour plus d’informations, consultez SSC-FDM-0020.
Transact¶
Résultats¶
Nom |
ID |
AGE |
|---|---|---|
John Doe |
2 |
21 |
Nom |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
INSERT FIRST |
1200 |
230 |
Snowflake¶
Résultats¶
WITH_MULTIPLE_RETURNS |
|---|
[ « RESULTSET_88C35D7A_1E5B_455D_97A4_247806E583A5 », « RESULTSET_B2345B61_A015_43CB_BA11_6D3E013EF262 » ] |
Problèmes connus¶
1. Invalid code is detected¶
SP_EXECUTESQL peut exécuter plusieurs instructions SQL à l’intérieur de la chaîne SQL. Snowflake prend également en charge l’exécution de plusieurs instructions SQL, mais doit être placé dans un bloc BEGIN ... END. De plus, lors de l’exécution de plusieurs instructions à partir d’un bloc BEGIN ... END, l’instruction EXECUTE IMMEDIATE ne renverra pas de jeu de résultats. La traduction pour ces cas n’est pas encore prise en charge par SnowConvert AI. Pour plus d’informations, voir SSC-EWI-0030.
Ainsi, lorsque ce cas est détecté, dans le code traduit, EXECUTE IMMEDIATE ne sera pas affecté à ProcedureResultSet.
Transact¶
Résultats¶
Nom |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
INSERT FIRST |
1200 |
230 |
Snowflake¶
Résultats¶
2. Valid or Invalid code is not detected¶
Lorsque la chaîne SQL est construite dynamiquement par concaténations, SnowConvert AI peut ne pas détecter quelle instruction va être exécutée. Ainsi, dans le code traduit, l’instructionEXECUTE IMMEDIATE ne sera pas attribuée à ProcedureResultSet.
Transact¶
Résultats¶
Nom |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
INSERT FIRST |
1200 |
230 |
Snowflake¶
Résultats¶
3. Invalid code is mistaken as valid¶
Si la chaîne SQL commence par une instruction SELECT et est suivie d’autres instructions, SnowConvert AI détectera un code valide et essaiera d’attribuer le résultat de l’instruction EXECUTE IMMEDIATE à ProcedureResultSet. Cela entraîne une erreur de compilation. Pour plus d’informations, voir SSC-EWI-0030.
Transact¶
Résultats¶
Nom |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
Nom |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
Snowflake¶
Résultats¶
EWIs connexes¶
SSC-EWI-0030 : L’instruction ci-dessous a des utilisations de SQL dynamique
SSC-FDM-TS0028 : Les paramètres de sortie doivent avoir le même ordre que celui dans lequel ils apparaissent dans le code exécuté.
SSC-FDM-0020 : Plusieurs jeux de résultats sont renvoyés dans des tables temporaires.
SP_RENAME¶
Stored Procedure to Rename certain objects in SQL Server
Applies to
SQL Server
Azure Synapse Analytics
La procédure de stockage du système SP_RENAME peut être émulée dans Snowflake dans certains scénarios. En général, l’équivalent est l’instruction EXECUTE IMMEDIATE qui utilise une instruction dynamique avecALTER TABLE et les paramètres d’origine.
Exemples de traduction pour les tables¶
Source¶
Sortie¶
Source¶
Sortie¶
Exemples de traduction pour les colonnes¶
Source¶
Sortie¶
Source¶
Sortie¶
EWIs connexes¶
SSC-EWI-TS0075 : La traduction de la procédure intégrée n’est pas prise en charge actuellement.
WAITFOR DELAY¶
Applies to
SQL Server
Azure Synapse Analytics
Description¶
In SQL Server, WAITFOR DELAY pauses execution for a specified duration. SnowConvert AI transforms WAITFOR DELAY statements to Snowflake’s CALL SYSTEM$WAIT() function, which provides equivalent delay functionality.
The time string is parsed and converted to seconds (or milliseconds for sub-second precision). Variables and parameters are passed through directly with an EWI warning, since SYSTEM$WAIT expects a numeric value rather than a time string.
Note
WAITFOR TIME (which pauses until a specific time of day) has no Snowflake equivalent and remains flagged with SSC-EWI-0073.
Exemples de traduction¶
WAITFOR DELAY with literal time¶
Code d’entrée :¶
Generated Code:¶
WAITFOR DELAY with sub-second precision¶
Code d’entrée :¶
Generated Code:¶
WAITFOR DELAY with variable¶
Code d’entrée :¶
Generated Code:¶
WAITFOR DELAY at script level¶
Code d’entrée :¶
Generated Code:¶
Known Limitations¶
WAITFOR TIME(pause until a specific time of day) has no Snowflake equivalent and is flagged with SSC-EWI-0073.When a variable is used, SSC-EWI-TS0094 is emitted because
SYSTEM$WAITexpects a numeric value but the variable may contain a time string in'HH:MM:SS'format.
EWIs connexes¶
SSC-EWI-TS0094: WAITFOR DELAY variable may contain a time string incompatible with SYSTEM$WAIT.
SSC-EWI-0073: Pending functional equivalence review (emitted for WAITFOR TIME).
CREATE STATISTICS¶
Applies to
SQL Server
Azure Synapse Analytics
Description¶
SnowConvert AI comments out CREATE STATISTICS statements because Snowflake automatically collects optimizer statistics and does not require this statement.
Translation Example¶
Code d’entrée :¶
Generated Code:¶
Additional Example¶
Code d’entrée :¶
Generated Code:¶
Known Limitations¶
Any operational process that explicitly creates or refreshes statistics in SQL Server should be reviewed, because Snowflake manages optimizer statistics automatically.