SnowConvert AI - Serveur SQL-Azure Synapse - DMLs¶
BETWEEN¶
Renvoie TRUE lorsque l’expression d’entrée (numérique ou chaîne) se trouve dans les limites inférieure et supérieure spécifiées.
Applies to
SQL Server
Azure Synapse Analytics
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Code source
Code attendu
BULK INSERT¶
Référence de traduction pour l’instruction Bulk Insert.
Applies to
SQL Server
Azure Synapse Analytics
Certaines parties du code de sortie sont omises pour des raisons de clarté.
La traduction directe de BULK INSERT est l’instruction Snowflake COPY INTO. COPY INTO n’utilise pas directement le chemin du fichier pour récupérer les valeurs. Le fichier doit exister au préalable dans un STAGE. De même, les options utilisées dans BULK INSERT doivent être spécifiées dans un Snowflake FILE FORMAT qui sera consommé par STAGE ou directement par COPY INTO.
Pour ajouter un fichier à un STAGE, vous devez utiliser la commande PUT. Notez que la commande ne peut être exécutée qu’à partir de SnowSQL CLI. Voici un exemple des étapes à suivre avant d’exécuter un COPY INTO :
SQL Server¶
Snowflake¶
As you see in the code above, SnowConvert AI identifies all the BULK INSERTS in the code, and for each instance, a new STAGE and FILE FORMAT will be created before the copy into execution. In addition, after the creation of the STAGE, a PUT command will be created as well to add the file to the stage.
The names of the generated statements are auto-generated using the current timestamp in seconds, to avoid collisions between their usages.
Enfin, toutes les options de bulk insert sont mappées aux options de format de fichier, le cas échéant. Si l’option n’est pas prise en charge par Snowflake, elle sera commentée et un avertissement sera ajouté. Voir aussi SSC-FDM-TS0004.
Options bulk prises en charge¶
SQL Server |
Snowflake |
|---|---|
FORMAT |
TYPE |
FIELDTERMINATOR |
FIELD_DELIMITER |
FIRSTROW |
SKIP_HEADER |
ROWTERMINATOR |
RECORD_DELIMITER |
FIELDQUOTE |
FIELD_OPTIONALLY_ENCLOSED_BY |
Expression de table commune (CTE)¶
Applies to
SQL Server
Azure Synapse Analytics
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Les expressions de table communes sont prises en charge par défaut dans Snowflake SQL.
Syntaxe¶
Snowflake SQL¶
Sous-requête :
CTE récursive :
Où :
Détails notables¶
The RECURSIVE keyword does not exist in T-SQL, and the transformation does not actively add the keyword to the result. A warning is added to the output code to state this behavior.
Expression de table commune avec SELECT INTO¶
La transformation suivante se produit lorsque l’expression WITH est suivie d’une instruction SELECT INTO et qu’elle sera transformée en une TEMPORARY TABLE.
SQL Server :¶
Snowflake :¶
Expression de table commune avec d’autres expressions¶
La transformation suivante se produit lorsque l’expression WITH est suivie d’instructions INSERT ou DELETE.
SQL Server :¶
Snowflake :¶
Expression de table commune avec Delete From¶
Cette transformation ne s’appliquera qu’aux CTE (expressions de table communes) avec Delete From, mais seulement pour des CTE spécifiques. Il ne doit avoir qu’une seule CTE, et il doit avoir à l’intérieur une fonction de ROW_NUMBER ou RANK.
L’objectif de la CTE avec Delete doit être de supprimer les doublons d’une table. Dans le cas où la CTE avec Delete vise à supprimer un autre type de données, cette transformation ne s’appliquera pas.
Prenons un exemple. Pour un exemple concret, nous devons d’abord créer une table contenant des données.
Notez qu’il y a une valeur en double. Les lignes 8 et 12 insèrent la même valeur. Nous allons maintenant éliminer les lignes en double dans une table.
Si nous exécutons un Select à partir de la table, le résultat sera le suivant
ID |
Valeur |
StringValue |
|---|---|---|
100 |
100 |
Premier |
200 |
200 |
Seconde |
300 |
300 |
Troisième |
400 |
400 |
Quatrième |
Note that the duplicated rows have been removed. To preserve this functionality in Snowflake, which does not support DELETE from a CTE, SnowConvert transforms the statement into the following:
Comme vous pouvez le constater, la requête est transformée en Create ou Replace Table.
To test it in Snowflake, you will need the table.
Maintenant, si nous exécutons le résultat de la transformation, puis un Select pour vérifier si les lignes dupliquées ont été supprimées, voici le résultat.
ID |
Valeur |
StringValue |
|---|---|---|
100 |
100 |
Premier |
200 |
200 |
Seconde |
300 |
300 |
Troisième |
400 |
400 |
Quatrième |
Expression de table commune avec l’instruction MERGE¶
La transformation suivante se produit lorsque l’expression WITH est suivie de l’instruction MERGE et qu’elle sera transformée en MERGE INTO.
SQL Server :¶
Snowflake :¶
Expression de table commune avec l’instruction UPDATE¶
La transformation suivante se produit lorsque l’expression WITH est suivie d’une instruction UPDATE et qu’elle sera transformée en UPDATE instruction.
SQL Server :¶
Snowflake :¶
Problèmes connus¶
Aucun problème n’a été constaté.
EWIs connexes¶
SSC-EWI-0108 : La sous-requête suivante correspond à au moins un des modèles considérés comme invalides et peut produire des erreurs de compilation.
SSC-PRF-TS0001: Avertissement lié aux performances - Récursivité pour la CTE non vérifiée. Peut nécessiter un mot-clé récursif.
DELETE¶
Référence de traduction pour l’instruction Transact-SQL Delete dans Snowflake
Applies to
SQL Server
Azure Synapse Analytics
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
Removes one or more rows from a table or view in SQL Server. For more information, see the SQL Server DELETE documentation.
Modèles d’échantillons de sources¶
Données d’échantillon¶
SQL Server¶
Snowflake¶
Cas de base¶
La transformation de l’instruction DELETE est assez simple, avec quelques mises en garde. L’une de ces mises en garde concerne la manière dont Snowflake prend en charge les sources multiples dans la clause FROM. Il existe toutefois un équivalent dans Snowflake, comme indiqué ci-dessous.
SQL Server¶
Snowflake¶
Note
Notez que, puisque le DELETE d’origine concernait T1, la présence de TABLE2 T2 dans la clause FROM exige la création de la clause USING.
Supprimer les doublons d’une table¶
La documentation suivante explique un modèle courant utilisé pour supprimer les lignes dupliquées d’une table dans le SQL Server. Cette approche utilise la fonction ROW_NUMBER pour partitionner les données sur la base de la key_value qui peut être une ou plusieurs colonnes séparées par des virgules. Ensuite, supprimez tous les enregistrements dont la valeur du numéro de ligne est supérieure à 1. Cette valeur indique que les enregistrements sont des doublons. Vous pouvez consulter la documentation référencée pour comprendre le comportement de cette méthode et la recréer.
L’exemple suivant utilise cette approche pour supprimer les doublons d’une table et son équivalent dans Snowflake. La transformation consiste à exécuter une instruction INSERT OVERWRITE qui tronque la table (supprime toutes les données) et insère à nouveau les lignes de la même table en ignorant celles qui sont dupliquées. Le code de sortie est généré en tenant compte des mêmes clauses PARTITION BY et ORDER BY que celles utilisées dans le code d’origine.
SQL Server¶
Create table avec des lignes dupliquées
Insérer des doublons¶
Sortie¶
someID |
col2 |
col3 |
col4 |
col5 |
|---|---|---|---|---|
10 |
true |
false |
false |
true |
10 |
true |
false |
false |
true |
11 |
true |
true |
false |
true |
12 |
false |
false |
true |
true |
12 |
false |
false |
true |
true |
13 |
true |
false |
true |
false |
14 |
true |
false |
true |
false |
14 |
true |
false |
true |
false |
Supprimer les doublons¶
Sortie¶
someID |
col2 |
col3 |
col4 |
col5 |
|---|---|---|---|---|
10 |
true |
false |
false |
true |
11 |
true |
true |
false |
true |
12 |
false |
false |
true |
true |
13 |
true |
false |
true |
false |
14 |
true |
false |
true |
false |
Snowflake¶
Create table avec des lignes dupliquées
Insérer des doublons¶
Sortie¶
someID |
col2 |
col3 |
col4 |
col5 |
|---|---|---|---|---|
10 |
true |
false |
false |
true |
10 |
true |
false |
false |
true |
11 |
true |
true |
false |
true |
12 |
false |
false |
true |
true |
12 |
false |
false |
true |
true |
13 |
true |
false |
true |
false |
14 |
true |
false |
true |
false |
14 |
true |
false |
true |
false |
Supprimer les doublons¶
Sortie¶
someID |
col2 |
col3 |
col4 |
col5 |
|---|---|---|---|---|
10 |
true |
false |
false |
true |
11 |
true |
true |
false |
true |
12 |
false |
false |
true |
true |
13 |
true |
false |
true |
false |
14 |
true |
false |
true |
false |
Avertissement
Considérez qu’il peut exister plusieurs variantes de ce modèle, mais qu’elles sont toutes basées sur le même principe et présentent la même structure.
DELETE WITH INNER JOIN¶
SQL SERVER¶
Sortie¶
EmployeeID |
FirstName |
LastName |
DepartmentID |
|---|---|---|---|
5 |
Michael |
David |
null |
6 |
Lucas |
Parker |
8 |
Snowflake¶
Sortie¶
EmployeeID |
FirstName |
LastName |
DepartmentID |
|---|---|---|---|
5 |
Michael |
David |
null |
6 |
Lucas |
Parker |
8 |
DELETE WITH LEFT JOIN¶
SQL Server¶
Sortie¶
EmployeeID |
FirstName |
LastName |
DepartmentID |
|---|---|---|---|
1 |
John |
Doe |
1 |
2 |
Jane |
Smith |
2 |
3 |
Bob |
Johnson |
1 |
4 |
Alice |
Brown |
3 |
Snowflake¶
Sortie¶
EmployeeID |
FirstName |
LastName |
DepartmentID |
|---|---|---|---|
1 |
John |
Doe |
1 |
2 |
Jane |
Smith |
2 |
3 |
Bob |
Johnson |
1 |
4 |
Alice |
Brown |
3 |
DELETE WITH RIGHT JOIN¶
SQL SERVER¶
Sortie¶
EmployeeID |
FirstName |
LastName |
DepartmentID |
|---|---|---|---|
5 |
Michael |
David |
null |
6 |
Lucas |
Parker |
8 |
Snowflake¶
Sortie¶
EmployeeID |
FirstName |
LastName |
DepartmentID |
|---|---|---|---|
5 |
Michael |
David |
null |
6 |
Lucas |
Parker |
8 |
Problèmes connus¶
FULL JOIN non pris en charge\ FULL JOIN ne peut pas être représenté en utilisant la syntaxe (+). Si trouvé, SnowConvert AI avertira l’utilisateur à ce sujet avec un FDM.
SQL Server¶
Snowflake¶
EWIs connexes¶
SSC-EWI-TS0081: L’utilisation d’une jointure complète dans une instruction de suppression n’est pas prise en charge.
DROP STATEMENT¶
Instructions DROP
Applies to
SQL Server
Azure Synapse Analytics
Certaines parties du code de sortie sont omises pour des raisons de clarté.
DROP TABLE¶
Transact-SQL¶
Snowflake¶
Traduction¶
La traduction des instructions DROP TABLE simples est très facile. Tant qu’il n’y a qu’une seule table supprimée dans l’instruction, elle est laissée telle quelle.
Par exemple :
La seule différence notable entre SQL Server et Snowflake apparaît lorsque l’instruction d’entrée supprime plus d’une table. Dans ce cas, une instruction DROP TABLE différente est créée pour chaque table supprimée.
Par exemple :
SQL Server¶
Snowflake¶
EXISTS¶
Sous-requêtes Transact-SQL utilisant les détails de transformation de l’instruction EXISTS
Applies to
SQL Server
Azure Synapse Analytics
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Types de sous-requêtes¶
Les sous-requêtes peuvent être classées comme corrélées ou non corrélées :
Une sous-requête corrélée fait référence à une ou plusieurs colonnes à l’extérieur de la sous-requête. (Les colonnes sont généralement référencées dans la clause WHERE de la sous-requête.) Une sous-requête corrélée peut être considérée comme un filtre sur la table à laquelle elle se réfère, comme si la sous-requête était évaluée sur chaque ligne de la table dans la requête externe.
Une sous-requête non corrélée ne présente pas de telles références de colonnes externes. Il s’agit d’une requête indépendante dont les résultats sont renvoyés et utilisés une fois par la requête externe (et non par ligne).
L’instruction EXISTS est considérée comme une sous-requête corrélée.
SQL SERVER¶
Snowflake¶
IN¶
Sous-requêtes Transact-SQL utilisant les détails de transformation de l’instruction IN
Applies to
SQL Server
Azure Synapse Analytics
Certaines parties du code de sortie sont omises pour des raisons de clarté.
L’opérateur IN vérifie si une expression est incluse dans les valeurs retournées par une sous-requête.
SQL SERVER¶
Snowflake¶
INSERT¶
Référence de traduction pour l’instruction Serveur SQL Insert dans Snowflake
Applies to
SQL Server
Azure Synapse Analytics
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
Adds one or more rows to a table or a view in SQL Server. For more information, see the SQL Server INSERT documentation.
Comparaison des syntaxes¶
La grammaire de base des insertions est équivalente entre les deux langages SQL. Toutefois, d’autres éléments de syntaxe de SQL Server présentent des différences. Par exemple, l’un d’eux permet au développeur d’ajouter une valeur à une colonne en utilisant l’opérateur d’assignation. La syntaxe mentionnée sera également transformée en syntaxe d’insertion de base.
Snowflake¶
SQL Server¶
Modèles d’échantillons de sources¶
INSERT de base¶
SQL Server¶
Snowflake¶
INSERT with assign operator¶
SQL Server¶
Snowflake¶
INSERT sans INTO¶
SQL Server¶
Snowflake¶
INSERT avec expression de la table commune¶
SQL Server¶
Snowflake¶
INSERT avec facteur DML de table avec MERGE comme DML¶
Ce cas est si spécifique où l’instruction INSERT a une requête SELECT, et la clause FROM de la requête SELECT mentionnée contient une instruction MERGE DML. En recherchant un équivalent dans Snowflake, les instructions suivantes sont créées : une table temporaire, l’instruction de fusion a été convertie, et pour finir, l’instruction d’insertion.#x20;
SQL Server¶
Snowflake¶
NOTE: comme l’indique le nom du modèle, il est ONLY pour les cas où l’insertion contient une instruction select… from dont le corps contient une instruction MERGE.#x20;
Problèmes connus¶
1. Éléments de syntaxe nécessitant un mappage particulier :
[INTO] : Ce mot-clé est obligatoire dans Snowflake et doit être ajouté s’il n’est pas présent.
[DEFAULT VALUES] : Insère la valeur par défaut dans toutes les colonnes spécifiées dans l’insertion. Doit être transformé en VALUES (DEFAULT, DEFAULT, …), la quantité de DEFAULTs ajoutés est égale au nombre de colonnes que l’insertion modifiera. Pour l’instant, un avertissement a été ajouté.
SQL Server¶
Snowflake¶
2. Éléments de syntaxe non pris en charge ou non pertinents :
[TOP (expression) [PERCENT]] : Indique la quantité ou le pourcentage de lignes qui seront insérées. Non pris en charge.
[rowset_fonction_limited] : Il s’agit soit de OPENQUERY(), soit de OPENROWSET(), utilisé pour lire des données à partir de serveurs distants. Non pris en charge.
[WITH table_hint_limited] : Elles sont utilisées pour obtenir des verrous en lecture/écriture sur les tables. Non pertinent pour Snowflake.
[<OUTPUT Clause>] : Spécifie une table ou un jeu de résultats dans lequel les lignes insérées seront également insérées. Non pris en charge.
[execute_statement] : Peut être utilisé pour exécuter une requête afin d’obtenir des données. Non pris en charge.
[dml_table_source] : Un jeu de résultats temporaire généré par la clause OUTPUT d’une autre instruction DML. Non pris en charge.
3. Le cas DELETE n’est pas envisagé.
Pour le INSERT avec facteur DML de table avec MERGE comme modèle DML, le cas DELETE n’est pas pris en compte dans la solution, donc si l’instruction de fusion du code source comporte un cas DELETE, considérez qu’il peut ne pas fonctionner comme prévu.#x20;
EWIs connexes¶
SSC-EWI-0073 : En attente de l’examen de l’équivalence fonctionnelle.
SSC-FDM-TS0026 : Le cas DELETE n’est pas pris en compte.
MERGE¶
Détails de transformation de l’instruction Transact-SQL MERGE
Applies to
SQL Server
Azure Synapse Analytics
Comparaison des syntaxes¶
Snowflake¶
Transact-SQL¶
Exemple¶
Étant donné le code source suivant :
SQL Server¶
Vous pouvez vous attendre à obtenir un résultat similaire au suivant :
Snowflake¶
EWIs connexes¶
SSC-EWI-0021 : Syntaxe non prise en charge par Snowflake.
SELECT¶
Référence de traduction pour convertir l’instruction Serveur SQL Select en Snowflake
Applies to
SQL Server
Azure Synapse Analytics
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
Allows the selection of one or more rows or columns of one or more tables in SQL Server. For more information, see the SQL Server SELECT documentation.
Modèles d’échantillons de sources¶
SELECT WITH COLUMN ALIASES¶
L’exemple suivant montre comment utiliser les alias de colonne dans Snowflake. Les deux premières colonnes, issues du code SQL Server, sont censées être transformées d’une forme d’affectation en une forme normalisée à l’aide du mot-clé AS. Les troisième et quatrième colonnes utilisent des formats Snowflake valides.
SQL Server¶
Snowflake¶
SELECT TOP¶
SQL Server¶
Snowflake¶
SELECT INTO¶
L’exemple suivant montre SELECT INTO qui est transformé en CREATE TABLE AS, c’est parce que dans Snowflake il n’y a pas d’équivalent pour SELECT INTO et créer une table basée sur une requête doit se faire avec CREATE TABLE AS.
SQL Server¶
Snowflake¶
Un autre cas consiste à inclure des opérateurs d’ensemble tels que EXCEPT et INTERSECT. La transformation est fondamentalement la même que la précédente.
SQL Server¶
Snowflake¶
SELECT TOP Additional Arguments¶
Comme les mots-clés PERCENT et WITH TIES affectent le résultat et qu’ils ne sont pas pris en charge par Snowflake, ils seront commentés et ajoutés en tant qu’erreurs.
SQL Server¶
Snowflake¶
SELECT FOR¶
The FOR XML clause is transformed differently depending on whether the path is empty or not.
FOR XML PATH(“”) — Empty path (string concatenation pattern):
FOR XML PATH('') is a common SQL Server pattern used for string concatenation (before STRING_AGG was introduced). When the path is empty and there is no ROOT clause, the query is transformed to use LISTAGG with CONCAT instead of XML functions, because the intent is string aggregation rather than XML generation.
SQL Server¶
Snowflake¶
When there is a single expression, CONCAT is omitted:
SQL Server¶
Snowflake¶
FOR XML PATH — Non-empty path (XML generation):
When the path is not empty, the FOR XML PATH clause is converted to use FOR_XML_UDF with OBJECT_CONSTRUCT to produce XML output. This conversion emits SSC-FDM-TS0016 because the resulting XML format in Snowflake may differ from SQL Server.
SQL Server¶
Snowflake¶
SELECT OPTION¶
La clause OPTION n’est pas prise en charge par Snowflake. Elle sera commentée et ajoutée en tant qu’avertissement lors de la transformation.
Notez que l’instruction OPTION a été supprimée de la transformation parce qu’elle n’est pas pertinente ou n’est pas nécessaire dans Snowflake.
SQL Server¶
Snowflake¶
SELECT WITH¶
La clause WITH n’est pas prise en charge par Snowflake. Elle sera commentée et ajoutée en tant qu’avertissement lors de la transformation.
Notez que l’instruction WITH(NOLOCK, NOWAIT) a été supprimée de la transformation car elle n’est pas pertinente ou n’est pas nécessaire dans Snowflake.
SQL Server¶
Snowflake¶
EWIs connexes¶
SSC-EWI-0040 : Instruction non prise en charge.
SSC-FDM-TS0016 : Les colonnes XML dans Snowflake peuvent avoir un format différent
SET OPERATORS¶
Applies to
SQL Server
Azure Synapse Analytics
Les opérateurs d’ensemble dans TSQL et Snowflake présentent la même syntaxe et les mêmes scénarios pris en charge (EXCEPT, INTERSECT, UNION et UNION ALL), à l’exception de MINUS qui n’est pas pris en charge dans TSQL, ce qui donne le même code lors de la conversion.
TRUNCATE¶
Détails de transformation de l’instruction Transact-SQL TRUNCATE
Applies to
SQL Server
Azure Synapse Analytics
Certaines parties du code de sortie sont omises pour des raisons de clarté.
SQL Server¶
Snowflake¶
UPDATE¶
Référence de traduction pour convertir l’instruction Serveur SQL Update en Snowflake
Applies to
SQL Server
Azure Synapse Analytics
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
Changes existing data in a table or view in SQL Server. For more information, see the SQL Server UPDATE documentation.
Modèles d’échantillons de sources¶
UPDATE de base¶
La conversion pour une instruction UPDATE régulière est très simple. La structure UPDATE de base étant prise en charge par défaut dans Snowflake, les valeurs aberrantes sont les parties où vous allez voir des différences.
SQL Server¶
Snowflake¶
Produits cartésiens¶
SQL Server autorise l’ajout de références circulaires entre la table cible de l’instruction de mise à jour et la clause FROM / Lors de l’exécution, l’optimiseur de base de données supprime tout produit cartésien généré. Dans le cas contraire, Snowflake n’optimise actuellement pas ce scénario, produisant un produit cartésien qui peut être vérifié dans le plan d’exécution.\
Pour résoudre ce problème, s’il existe un JOIN dont l’une des tables est identique à la cible de la mise à jour, cette référence est supprimée et ajoutée à la clause WHERE, et elle est utilisée pour simplement filtrer les données et éviter d’effectuer une opération d’ensemble.
SQL Server¶
Snowflake¶
Clause OUTPUT¶
La clause OUTPUT n’est pas prise en charge par Snowflake.
SQL Server¶
Snowflake¶
CTE¶
La clause WITH CTE est déplacée vers la requête interne dans l’instruction de mise à jour pour être prise en charge par Snowflake.
SQL Server¶
Snowflake¶
Clause TOP¶
La clause TOP n’est pas prise en charge par Snowflake.
SQL Server¶
Snowflake¶
WITH TABLE HINT LIMITED¶
La clause Update WITH n’est pas prise en charge par Snowflake.
SQL Server¶
Snowflake¶
EWIs connexes¶
SSC-EWI-0021 : Syntaxe non prise en charge par Snowflake.
UPDATE WITH JOIN¶
Spécification de traduction pour l’instruction UPDATE avec les clauses WHERE et JOIN
Avertissement
Les informations de cette section, en cours de modification, sont sujettes à modification.
Description¶
Le modèle UPDATE FROM est utilisé pour mettre à jour les données en fonction des données provenant d’autres tables. La documentation SQLServer fournit un échantillon simple.
Examinez la syntaxe SQL Server suivante de la documentation.
Syntaxe SQL Server¶
table_name: La table ou la vue que vous mettez à jour.SET: Spécifie les colonnes et leurs nouvelles valeurs. La clauseSETattribue une nouvelle valeur (ou expression) à une ou plusieurs colonnes.FROM: Utilisé pour spécifier une ou plusieurs tables sources (comme une jointure). Il permet de définir d’où proviennent les données pour effectuer la mise à jour.WHERE: Spécifie quelles lignes doivent être mises à jour en fonction de la ou des conditions. Sans cette clause, toutes les lignes de la table seraient mises à jour.OPTION (query_hint): Spécifie les indices pour l’optimisation des requêtes.
Syntaxe Snowflake¶
La syntaxe Snowflake peut également être consultée dans la documentation Snowflake.
Note
Snowflake ne prend pas en charge la clause JOINs dans UPDATE.
Paramètres requis
_
target_table :_spécifie la table à mettre à jour._
col_name :spécifie le nom d’une colonne dans _target_table. Ne pas inclure le nom de la table. Par exemple,UPDATE t1 SET t1.col = 1n’est pas valable._
value:spécifie la nouvelle valeur à mettre en ensemble dans _col_name.
Paramètres facultatifs
FROM``_additional_tables :_ Spécifie une ou plusieurs tables à utiliser pour sélectionner les lignes à mettre à jour ou pour définir de nouvelles valeurs. Notez que la répétition de la table cible entraîne une auto-jonctionWHERE``_condition :_L’expression qui spécifie les lignes de la table cible à mettre à jour. Par défaut : aucune valeur (toutes les lignes de la table cible sont mises à jour)
Résumé de la traduction¶
Type Serveur SQL JOIN |
Meilleure alternative Snowflake |
|---|---|
|
Utilisez la table cible dans la clause |
|
Utilisez la table cible dans la clause |
|
Utiliser l’opération de sous-requête + IN |
|
Utiliser l’opération de sous-requête + IN |
|
Utilisez Snowflake |
|
Utilisez Snowflake |
RIGHT JOIN unique |
Utilisez la table dans la clause |
Note-1 : Un JOIN simple peut utiliser la table dans la clause FROM et ajouter des filtres dans la clause WHERE selon les besoins.
Note-2 : D’autres approches peuvent inclure l’opérande (+) pour définir l’adresse JOINs.
Modèles d’échantillons de sources¶
Données de configuration¶
SQLServer¶
Snowflake¶
Data Insertion for samples
Cas 1 : Mise à jour de INNER JOIN simple¶
Pour INNER JOIN, si la table est utilisée à l’intérieur des instructions FROM, elle devient automatiquement INNER JOIN. Notez qu’il existe plusieurs approches pour prendre en charge les JOINs dans les instructions UPDATE dans Snowflake. Il s’agit de l’un des modèles les plus simples pour garantir la lisibilité.
SQL Server¶
Sortie¶
CustomerID |
Quantité |
CustomerName |
|---|---|---|
1 |
10 |
John Doe |
Snowflake¶
Sortie¶
CustomerID |
Quantité |
CustomerName |
|---|---|---|
1 |
10 |
John Doe |
Autres approches :
MERGE INTO
IN Operation
Cas 2 : Mise à jour de plusieurs INNER JOIN¶
SQL Server¶
Sortie¶
CustomerID |
Quantité |
CustomerName |
|---|---|---|
3 |
5 |
Alice Johnson |
Snowflake¶
Sortie¶
CustomerID |
Quantité |
CustomerName |
|---|---|---|
3 |
5 |
Alice Johnson |
Cas 3 : Mise à jour de plusieurs INNER JOIN avec condition d’agrégation¶
SQL Server¶
Sortie¶
CustomerID |
CustomerName |
Quantité |
Prix |
|---|---|---|---|
11 |
Jack Grey |
6 |
29,99 |
18 |
Quincy Brown |
6 |
15,99 |
20 |
Sam Green |
6 |
89,99 |
22 |
Ursula Red |
6 |
9,99 |
24 |
Wendy Black |
6 |
49,99 |
Snowflake¶
Sortie¶
CustomerID |
CustomerName |
Quantité |
Prix |
|---|---|---|---|
11 |
Jack Grey |
6 |
29,99 |
18 |
Quincy Brown |
6 |
15,99 |
20 |
Sam Green |
6 |
89,99 |
22 |
Ursula Red |
6 |
9,99 |
24 |
Wendy Black |
6 |
49,99 |
Cas 4 : Mise à jour de LEFT JOIN unique¶
SQL Server¶
Sortie¶
OrderID |
CustomerID |
ProductID |
Quantité |
OrderDate |
|---|---|---|---|---|
5 |
null |
5 |
7 |
2024-11-05 |
13 |
null |
13 |
13 |
2024-11-13 |
Snowflake¶
Sortie¶
OrderID |
CustomerID |
ProductID |
Quantité |
OrderDate |
|---|---|---|---|---|
5 |
null |
5 |
7 |
2024-11-05 |
13 |
null |
13 |
13 |
2024-11-13 |
Note
Cette approche dans Snowflake ne fonctionnera pas car elle ne met pas à jour les lignes nécessaires :
UPDATE Orders O SET O.Quantity = 13 FROM Customers C WHERE O.CustomerID = C.CustomerID AND C.CustomerID IS NULL AND O.ProductID = 13;
Cas 5 : Mise à jour de plusieurs LEFT JOIN et RIGHT JOIN¶
Ce modèle est plus complexe. Pour traduire plusieurs LEFT JOINs, veuillez consulter le modèle suivant :
Note
LEFT JOIN et RIGHT JOIN dépendront de l’ordre de la clause FROM.
SQL Server¶
Sortie¶
OrderID |
CustomerID |
ProductID |
Quantité |
OrderDate |
|---|---|---|---|---|
3 |
3 |
3 |
3 |
2024-11-12 |
Snowflake¶
Sortie¶
OrderID |
CustomerID |
ProductID |
Quantité |
OrderDate |
|---|---|---|---|---|
3 |
3 |
3 |
3 |
2024-11-12 |
Cas 6 : Mise à jour de INNER JOIN et LEFT JOIN mixte¶
SQL Server¶
Sortie¶
CustomerID |
CustomerName |
Quantité |
|---|---|---|
null |
null |
4 |
Snowflake¶
Sortie¶
CustomerID |
CustomerName |
Quantité |
|---|---|---|
null |
null |
4 |
Cas 7 : Mise à jour de RIGHT JOIN unique¶
SQL Server¶
Sortie¶
OrderID |
CustomerID |
ProductID |
Quantité |
CustomerName |
|---|---|---|---|---|
3 |
3 |
3 |
1000 |
Alice Johnson |
Snowflake¶
Sortie¶
OrderID |
CustomerID |
ProductID |
Quantité |
CustomerName |
|---|---|---|---|---|
3 |
3 |
3 |
1000 |
Alice Johnson |
Problèmes connus¶
Comme
UPDATEdans Snowflake ne permet pas l’utilisation directe deJOINs, certains cas peuvent ne pas correspondre aux modèles décrits.
UPDATE avec LEFT et RIGHT JOIN¶
Spécification de traduction pour l’instruction UPDATE avec JOINs.
Applies to
SQL Server
Azure Synapse Analytics
Avertissement
Partiellement pris en charge dans Snowflake
Description¶
Le modèle UPDATE FROM est utilisé pour mettre à jour les données en fonction des données provenant d’autres tables. La documentation SQLServer fournit un échantillon simple.
Examinez la syntaxe SQL Server suivante de la documentation.
Syntaxe SQL Server¶
table_name: La table ou la vue que vous mettez à jour.SET: Spécifie les colonnes et leurs nouvelles valeurs. La clauseSETattribue une nouvelle valeur (ou expression) à une ou plusieurs colonnes.FROM: Utilisé pour spécifier une ou plusieurs tables sources (comme une jointure). Il permet de définir d’où proviennent les données pour effectuer la mise à jour.WHERE: Spécifie quelles lignes doivent être mises à jour en fonction de la ou des conditions. Sans cette clause, toutes les lignes de la table seraient mises à jour.OPTION (query_hint): Spécifie les indices pour l’optimisation des requêtes.
Syntaxe Snowflake¶
La syntaxe Snowflake peut également être consultée dans la documentation Snowflake.
Note
Snowflake ne prend pas en charge la clause JOINs dans UPDATE.
Paramètres requis
_
target_table :_spécifie la table à mettre à jour._
col_name :spécifie le nom d’une colonne dans _target_table. Ne pas inclure le nom de la table. Par exemple,UPDATE t1 SET t1.col = 1n’est pas valable._
value:spécifie la nouvelle valeur à mettre en ensemble dans _col_name.
Paramètres facultatifs
FROM``_additional_tables :_ Spécifie une ou plusieurs tables à utiliser pour sélectionner les lignes à mettre à jour ou pour définir de nouvelles valeurs. Notez que la répétition de la table cible entraîne une auto-jonctionWHERE``_condition :_L’expression qui spécifie les lignes de la table cible à mettre à jour. Par défaut : aucune valeur (toutes les lignes de la table cible sont mises à jour)
Résumé de la traduction¶
Comme expliqué dans la description grammaticale, il n’existe pas de solution équivalente simple pour JOINs à l’intérieur de la clause UPDATE. Pour cette raison, l’approche pour transformer ces instructions consiste à ajouter l’opérateur (+) sur la colonne qui ajoutera logiquement les données requises dans la table. Cet opérateur (+) est ajouté aux cas sur lesquels les tables sont référencées dans la section LEFT/RIGHT JOIN.
Notice that there are other languages that use this operator (+) and the position of the operator may determine the type of join. In this specific case in Snowflake, the position will not determine the join type but the association with the logically needed tables and columns will.
Even when there are other alternative as MERGE clause or the usages of a CTE; these alternatives tend to turn difficult to read when there are complex queries, and get extensive.
Modèles d’échantillons de sources¶
Données de configuration¶
SQL Server¶
Snowflake¶
LEFT JOIN¶
SQL Server¶
Sortie avant la requête¶
Col1 |
Col2 |
Col3 |
Col4 |
Col5 |
Col6 |
|---|---|---|---|---|---|
1 |
A1 |
B1 |
C1 |
null |
null |
2 |
A2 |
B2 |
C2 |
null |
null |
3 |
A3 |
B3 |
C3 |
null |
null |
Sortie après la requête¶
Col1 |
Col2 |
Col3 |
Col4 |
Col5 |
Col6 |
|---|---|---|---|---|---|
1 |
A1 |
B1 |
C1 |
X1 |
Description1 |
2 |
A2 |
B2 |
C2 |
X2 |
Description2 |
3 |
A3 |
B3 |
C3 |
X3 |
Description3 |
Snowflake¶
Sortie avant la requête¶
Col1 |
Col2 |
Col3 |
Col4 |
Col5 |
Col6 |
|---|---|---|---|---|---|
1 |
A1 |
B1 |
C1 |
null |
null |
2 |
A2 |
B2 |
C2 |
null |
null |
3 |
A3 |
B3 |
C3 |
null |
null |
Sortie après la requête¶
Col1 |
Col2 |
Col3 |
Col4 |
Col5 |
Col6 |
|---|---|---|---|---|---|
1 |
A1 |
B1 |
C1 |
X1 |
Description1 |
2 |
A2 |
B2 |
C2 |
X2 |
Description2 |
3 |
A3 |
B3 |
C3 |
X3 |
Description3 |
RIGHT JOIN¶
SQL Server¶
Sortie avant la requête¶
Col1 |
Col2 |
Col3 |
Col4 |
Col5 |
Col6 |
|---|---|---|---|---|---|
1 |
A1 |
B1 |
C1 |
null |
null |
2 |
A2 |
B2 |
C2 |
null |
null |
3 |
A3 |
B3 |
C3 |
null |
null |
Sortie après la requête¶
Col1 |
Col2 |
Col3 |
Col4 |
Col5 |
Col6 |
|---|---|---|---|---|---|
1 |
A1 |
B1 |
C1 |
**X1 |
null |
2 |
A2 |
B2 |
C2 |
**X2 |
null |
3 |
A3 |
B3 |
C3 |
**X3 |
null |
Snowflake¶
Sortie avant la requête¶
Col1 |
Col2 |
Col3 |
Col4 |
Col5 |
Col6 |
|---|---|---|---|---|---|
1 |
A1 |
B1 |
C1 |
null |
null |
2 |
A2 |
B2 |
C2 |
null |
null |
3 |
A3 |
B3 |
C3 |
null |
null |
Sortie après la requête¶
Col1 |
Col2 |
Col3 |
Col4 |
Col5 |
Col6 |
|---|---|---|---|---|---|
1 |
A1 |
B1 |
C1 |
**X1 |
null |
2 |
A2 |
B2 |
C2 |
**X2 |
null |
3 |
A3 |
B3 |
C3 |
**X3 |
null |
Problèmes connus¶
Il se peut que certains modèles ne puissent être traduits en raison de différences de logique.
Si votre modèle de requête s’applique, passez en revue les lignes non déterministes : « Lorsqu’une clause FROM contient un conteneur JOIN entre des tables (par exemple
t1ett2), une ligne cible danst1peut être jointe (c’est-à-dire correspondre) à plus d’une ligne dans la tablet2. Dans ce cas, la ligne cible est appelée ligne à jointures multiples. Lors de la mise à jour d’une ligne multi-joints, le paramètre de session ERROR\ON_NONDETERMINISTIC_UPDATE contrôle le résultat de la mise à jour » (documentation Snowflake).