SnowConvert AI - Différences fonctionnelles SQL Server-Azure Synapse¶
Applies to
SQL Server
Analyses Azure Synapse
SSC-FDM-TS0001¶
Note
Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-TS0077.
Description¶
Ce message s’affiche lorsqu’il existe une clause de classement qui n’est pas prise en charge dans Snowflake.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Aucune action supplémentaire de la part de l’utilisateur n’est requise.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0002¶
Description¶
Ce message s’affiche lorsqu’il existe une clause de classement qui n’est pas prise en charge dans Snowflake.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Aucune action supplémentaire de la part de l’utilisateur n’est requise.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0003¶
XP_LOGININFO mappé vers UDF personnalisée
Description¶
Ce message s’affiche lorsque la procédure XP_LOGININFO est exécutée et renvoie l’ensemble de colonnes suivant ([Consultez la documentation SQL SERVER pour plus d’informations].(https://learn.microsoft.com/fr-fr/sql/relational-databases/system-stored-procedures/xp-logininfo-transact-sql?view=sql-server-ver16))
| account name | type | privilege | mapped login name | permission path |
To replicate this behavior, there is a query that select the columns from the APPLICABLE_ROLES view in Snowflake, which returns the following set of columns (See Snowflake documentation for more info)
GRANTEE |
ROLE_NAME |
ROLE_OWNER |
IS_GRANTABLE |
|---|
Les colonnes d’origine de SQL Server sont mappées comme indiqué dans le tableau suivant. Elles peuvent ne pas être complètement équivalentes.
| SQL Server | Snowflake | |
|---|---|---|
| account name | GRANTEE | |
| type | ROLE_OWNER | |
| privilege | ROLE_NAME | |
| mapped login name | GRANTEE | |
| permission path | NULL |
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0004¶
Description¶
This message is shown when a BULK INSERT was transformed and a PUT command is added to the output code. It happens because the PUT command cannot be executed using the SnowSQL Web UI. To successfully execute it, any user should have the SnowCLI installed before.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Installez SnowCLI.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0005¶
TRY_CONVERT/TRY_CAST n’a pas pu être converti en TRY_CAST.
Description¶
This FDM is added when a TRY_CONVERT or TRY_CAST cannot be converted to a TRY_CAST in Snowflake.
TRY_CAST de Snowflake a une limitation, car il autorise uniquement la conversion des expressions de chaîne. Cependant, les fonctions TRY_CONVERT et TRY_CAST de Transact autorisent toute expression de type de données.
Actuellement, la transformation de TRY_CONVERT ou TRY_CAST vers le TRY_CAST de Snowflake est exécutée uniquement pour les expressions de chaîne ou pour les expressions que l’outil peut identifier comme des chaînes dans son contexte.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Aucune action supplémentaire de la part de l’utilisateur n’est requise.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0006¶
La clause EXECUTE AS « user_name » n’existe pas dans Snowflake, et l’utilisateur qui appelle la procédure doit disposer de tous les privilèges requis.
Description¶
Ce message s’affiche lorsque SnowConvert AI trouve une procédure avec une clause EXECUTE AS 'user_name'. Celle-ci n’est pas prise en charge dans Snowflake. Elle est donc modifiée en EXECUTE AS CALLER.
Cette clause spécifie le contexte de sécurité dans lequel la procédure doit être exécutée.
Note
Pour plus de détails, consultez la [documentation](https://learn.microsoft.com/fr-fr/sql/t-sql/statements/execute-as-clause-transact-sql?view=sql-server-ver16&tabs =sqlserver) sur la fonctionnalité de la clause.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Aucune action supplémentaire de la part de l’utilisateur n’est requise.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0007¶
La clause FOR REPLICATION n’existe pas dans Snowflake.
Description¶
Ce message s’affiche lorsque SnowConvert AI trouve une procédure avec une clause FOR REPLICATION. Celle-ci n’est pas prise en charge dans Snowflake. Elle est donc supprimée.
Cette clause spécifie que la procédure est créée pour la réplication. Par conséquent, elle ne peut pas être exécutée sur l’abonné.
Note
Pour plus de détails, consultez la documentation sur la fonctionnalité de la clause.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Aucune action supplémentaire de la part de l’utilisateur n’est requise.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0008¶
La fonction FORMATMESSAGE a été convertie en UDF.
Description¶
Cet avertissement est ajouté, car la fonction FORMATMESSAGE est utilisée et a été remplacée par FORMATMESSAGE_UDF. Cet avertissement est ajouté, car l’FORMATMESSAGE_UDF utilisé pour remplacer le FORMATMESSAGE ne gère pas correctement tous les types de formats et peut générer une erreur dans certaines conditions.
Les valeurs numériques non signées qui sont indiquées comme négatives conserveront leur signe au lieu de changer de valeur. Par ailleurs, l’espace réservé %I64d n’est pas pris en charge par l’UDF, de sorte qu’il générera une erreur lorsqu’il sera utilisé.
In the FORMATMESSAGE_UDF, an error will happen if the given number of arguments is different than the number of placeholders.
Cette UDF ne prend pas en charge l’utilisation des IDs numériques des messages.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Évitez d’utiliser l’espace réservé
%I64ddans le message.Utilisez directement le message sous forme de chaîne au lieu d’utiliser un ID de message pour le premier argument.
Assurez-vous que le nombre d’espaces réservés est identique au nombre d’arguments après le message.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0009¶
Encrypted with non pris en charge dans Snowflake.
Description¶
Cet avertissement est ajouté lorsque ENCRYPTED WITH est utilisée dans une définition de colonnes. Comme cette clause n’est pas prise en charge dans Snowflake, elle est en cours de suppression, et un avertissement est ajouté.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Aucune action supplémentaire de la part de l’utilisateur n’est requise.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0010¶
La fonction CURRENT_DATABASE a un comportement différent dans certains cas.
Description¶
Cet EWI est ajouté lorsque la fonction DB_NAME est transformée en CURRENT_DATABASE, car Snowflake ne prend pas en charge le paramètre database_id, et la fonction CURRENT_DATABASE retournera toujours le nom de la base de données actuelle.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Aucune action supplémentaire de la part de l’utilisateur n’est requise.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0011¶
La valeur par défaut n’est pas autorisée dans Snowflake.
Note
Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-TS0078.
Description¶
Cette erreur est ajoutée au code lorsque des expressions telles que des appels de fonctions, des noms de variables ou des constantes nommées suivent l’option par défaut.
Snowflake ne prend en charge que les constantes explicites telles que les nombres ou les chaînes.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
¶
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0012¶
Les informations pour la colonne n’ont pas été trouvées. STRING est utilisé pour correspondre à l’opération CAST.
Description¶
Cet EWI est ajouté dans les fonctions définies par l’utilisateur à valeurs de table où le type de retour d’une colonne ne peut pas être déterminé pendant la conversion. STRING est utilisé par défaut pour correspondre à l’opération CAST dans l’instruction SELECT <!–TODO: search for a broken reference.->.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
L’utilisateur doit vérifier quel est le type de données correct qui n’a pas pu être trouvé et le modifier dans la définition de l’instruction
RETURNS TABLE.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0013¶
Les lignes de curseur de l’Exécution de scripts Snowflake ne sont pas modifiables.
Description¶
Cet EWI est ajouté lorsque les curseurs sont ouverts à la modification dans le code d’entrée. L’Exécution de scripts Snowflake ne permet pas de modifier les lignes de curseur.
Exemple de code :¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0014¶
Colonne calculée transformée
Description¶
Cet avertissement est ajouté lorsqu’une colonne calculée SQL Server est transformée en son équivalent Snowflake. Elle est ajoutée car, dans certains cas, l’équivalence fonctionnelle pourrait être affectée.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Aucune action supplémentaire de la part de l’utilisateur n’est requise. Cet avertissement est simplement donné à titre informatif.
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.
SSC-FDM-TS0016¶
Les colonnes XML dans Snowflake peuvent avoir un format différent.
Description¶
This warning is added when an SQL Server FOR XML clause with a non-empty path is transformed to its Snowflake equivalent using FOR_XML_UDF. It is added because columns in XML could be different.
Note
FOR XML PATH('') (empty path without a ROOT clause) is a common SQL Server string concatenation pattern and is not an XML generation scenario. These cases are transformed to LISTAGG instead of FOR_XML_UDF, and this FDM is not emitted. See the SELECT FOR section for details.
Exemple de code¶
Le tableau employee ci-dessous est donné à titre d’exemple.
Id |
Nom |
Hint |
|---|---|---|
1 |
Kinslee Park |
Développeur |
2 |
Ezra Mata |
Développeur |
3 |
Aliana Quinn |
Manager |
Code d’entrée :¶
Code¶
Sortie¶
Code généré :¶
Code¶
Sortie¶
Meilleures pratiques¶
Aucune action supplémentaire de la part de l’utilisateur n’est requise. Cet avertissement est simplement donné à titre informatif.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0017¶
La fonction CURRENT_USER ne prend pas en charge un ID utilisateur en tant que paramètre.
Description¶
Cet EWI est ajouté lorsque des fonctions comme SUSER_NAME ou SUSER_SNAME contiennent l’identificateur de l’utilisateur en tant que paramètre, car ce dernier n’est pas pris en charge dans la fonction CURRENT_USER dans Snowflake.
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Aucune action supplémentaire de la part de l’utilisateur n’est requise.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0018¶
La commande de console de base de données n’est pas prise en charge.
Note
Ce FDM est obsolète. Veuillez vous référer à la documentation SSC-EWI-TS0079.
Description¶
This FDM is added when SnowConvert AI finds a DBCC statement inside the input code.
Most DBCC statements are not supported in Snowflake.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Aucune action supplémentaire de la part de l’utilisateur n’est requise. Cet avertissement est simplement donné à titre informatif.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0019¶
Le message d’erreur RAISERROR peut différer à cause du format de chaîne SQL Server.
Description¶
Cet EWI est ajouté pour notifier que le message d’erreur RAISERROR peut différer à cause du format de chaîne SQL Server.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0020¶
La contrainte par défaut a été commentée et peut avoir été ajoutée à une définition de table.
Description¶
Ce FDM est ajouté lorsque la contrainte par défaut est présente dans une instruction Alter Table.
Currently, support for that constraint is unavailable. A workaround to transform it is to define the table before using Alter Table. This allows SnowConvert AI to identify the references, and the default constraint is consolidated in the table definition. Otherwise, the constraint is only commented out.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Problèmes connus¶
Lorsque différentes contraintes par défaut seront déclarées sur la même colonne, seule la première sera reflétée dans l’instruction Create Table.
Lorsqu’une contrainte par défaut est déclarée sur une colonne manquante, la transformation ne peut pas être effectuée en raison du manque de dépendances.
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0021¶
Une MASKING POLICY a été créée en tant que substitut pour MASKED WITH.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
Cet EWI est ajouté lorsque l’instruction Alter Table contient une clause MASKED WITH. Celui-ci est ajouté pour indiquer qu’une valeur approximative MASKING POLICY a été créée en tant que substitut pour la fonction MASKED WITH.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Note
La MASKING POLICY sera créée avant l’instruction ALTER TABLE. De plus, elle devrait avoir un comportement approximatif. Quelques ajustements peuvent être nécessaires en ce qui concerne les rôles et les privilèges des utilisateurs.
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0022¶
L’utilisateur doit préalablement définir le rôle de masquage.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Description¶
Cet EWI se produit lorsqu’une MASKING POLICY est créée et qu’un rôle ou privilège doit y être lié pour que le masquage des données puisse fonctionner correctement.
Exemple de code¶
Code d’entrée¶
Code généré :¶
Note
As shown on line 6, there is a placeholder where the defined roles can be placed. There is room for one or several values separated by commas. Also, here, the use of single quotes is mandatory for each of the values.
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0023¶
Error function could be different in Snowflake
Description¶
Cet EWI est ajouté dans la transformation des fonctions ERRORs suivantes en raison du changement de comportement correspondant.
ERROR_MESSAGE Le message de SQLERRM pourrait être différent dans Snowflake.
ERROR_STATE La propriété SQLSTATE cible pourrait renvoyer un nombre différent en raison de différences de plateforme.
ERROR_PROCEDURE La transformation a été modifiée pour renvoyer la procédure stockée dans laquelle la fonction est appelée.
Code d’entrée :¶
Code généré¶
Recommandation¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0024¶
CURRENT_TIMESTAMP dans l’instruction At Time Zone peut avoir un comportement différent dans certains cas.
Description¶
Ce FDM est ajouté lorsque At Time Zone possède l’CURRENT_TIMESTAMP. En effet, le résultat peut différer dans certains cas.
La principale différence est que dans SQL Server, CURRENT_TIMESTAMP renvoie la date et l’heure actuelles du système dans le fuseau horaire du serveur, tandis que dans Snowflake, CURRENT_TIMESTAMP renvoie la date et l’heure actuelles dans le fuseau horaire UTC (temps universel coordonné).
Code d’entrée :¶
SQL Server¶
Résultat¶
2024-02-08 16:52:55.317 -10:00
Code généré :¶
Snowflake¶
Résultat¶
2024-02-08 06:53:46.994 -1000
Meilleures pratiques¶
Ceci est un exemple si vous souhaitez conserver le même format dans Snowflake.
SQL Server¶
Résultat¶
2024-02-08 16:33:49.143 -10:00
Dans Snowflake, vous pouvez utiliser ALTER SESSION pour modifier le fuseau horaire par défaut. Par exemple :
Snowflake¶
Résultat¶
2024-02-08 16:33:49.143
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0025¶
DB_ID_UDF peut avoir un comportement différent dans certains cas.
Description¶
Ce FDM est ajouté pour préciser que l’DB_ID_UDF tente d’émuler la fonction SqlServer DB_ID aussi bien que possible. Dans SqlServer, l’identificateur attribué à une base de données est unique, et si la base de données est supprimée, cet ID ne sera plus jamais utilisé à nouveau ; sinon, dans Snowflake, cet identificateur correspond au numéro attribué à la base de données lors de sa création. Il est également unique, mais il s’agit d’un numéro consécutif, ce qui signifie que si cette base de données est supprimée, ce numéro sera attribué à la base de données qui a été créée après la base de données supprimée.
Code d’entrée :¶
SQL Server¶
Résultat¶
6
Code généré :¶
Snowflake¶
Résultat¶
6
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0026¶
Le cas DELETE n’est pas pris en compte dans la table temporaire.
Description¶
Il existe un modèle d’instruction INSERT qui nécessite une transformation spécifique, ce qui implique la création d’une table temporaire. Ce FDM notifie que le cas DELETE n’est pas pris en compte dans la transformation mentionnée. Veuillez consulter INSERT avec Table DML Factor avec MERGE as DML pour obtenir plus d’informations sur ce modèle.
Code d’entrée :¶
SQL Server¶
Code généré :¶
Snowflake¶
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0027¶
L’instruction SET ANSI_NULLS ON peut avoir un comportement différent dans Snowflake.
Description¶
Ce FDM notifie que l’instruction SET ANSI_NULLS ON peut se comporter différemment dans Snowflake. Pour plus d’informations sur cette instruction, consultez l’article ANSI_NULLS.
Code d’entrée¶
Code généré¶
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0028¶
Les paramètres de sortie doivent apparaître dans le même ordre que dans le code exécuté.
Description¶
Ce FDM notifie que les paramètres de sortie dans l’instruction SP_EXECUTESQL doivent apparaître dans le même ordre que dans la chaîne SQL à exécuter. Dans le cas contraire, les valeurs de sortie ne seront pas correctement attribuées.
Exemple de code¶
Cas correct¶
Comme vous pouvez le voir, @MaxAgeOUT et @MaxIdOUT apparaissent dans le même ordre dans la chaîne SQL et dans les paramètres de sortie.
Ainsi, lors de la conversion du code, le SELECT 1 $, 2 $ INTO :MAXAGE, :MAXID FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()) attribuera les valeurs correctement.
Transact¶
Snowflake¶
Cas problématique¶
Comme vous pouvez le voir, @MaxAgeOUT et @MaxIdOUT dans les paramètres de sortie apparaissent dans un ordre différent comparé à la chaîne SQL.
Ainsi, lors de la conversion du code, le SELECT 1 $, 2 $ INTO :MAXID, :MAXAGE FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()) attribuera les valeurs de manière incorrecte. Max(AGE) sera attribué à :MAXID et Max(ID) à :MAXAGE.
Cela doit être résolu manuellement en modifiant l’ordre des paramètres de sortie dans l’instruction SELECT INTO ou en modifiant l’ordre dans la chaîne SQL.
Transact¶
Snowflake¶
Meilleures pratiques¶
Assurez-vous que les paramètres OUTPUT apparaissent dans le même ordre que dans la chaîne SQL.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0029¶
L’instruction SET NOCOUNT est commentée, ce qui n’est pas applicable dans Snowflake.
Description¶
Lorsque SnowConvert AI rencontre une instruction SET NOCOUNT, il ajoute cette FDM. SnowConvert AI commente ensuite l’instruction SET NOCOUNT, car elle n’est pas pertinente dans l’environnement Snowflake.
Exemple de code¶
Code d’entrée :¶
Code généré¶
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0030¶
L’instruction SET ANSI_PADDING ON est commentée, ce qui est équivalent dans Snowflake.
Description¶
Snowflake préserve toujours les espaces de fin dans les valeurs de chaîne lorsqu’elles sont insérées dans des colonnes. Ce comportement est équivalent à SET ANSI_PADDING ON dans SQL Server. Par conséquent, lorsque SnowConvert AI rencontre une instruction SET ANSI_PADDING ON, il ajoute ce FDM et le commente.
Exemple de code¶
Code d’entrée :¶
Code généré¶
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0031¶
SET ANSI_WARNINGS ON statement is commented out because Snowflake generally adheres to ANSI-standard behaviors.
Description¶
Snowflake se comporte généralement comme si ANSI_WARNINGS était sur ON par défaut, en particulier en ce qui concerne la gestion des erreurs pour le débordement arithmétique, la division par zéro et la troncation de chaîne. Il n’est généralement pas nécessaire de « définir » explicitement un équivalent à ANSI_WARNINGS dans Snowflake. Par conséquent, lorsque SnowConvert AI rencontre une instruction SET ANSI_WARNINGS ON, il ajoute ce FDM et le commente.
Exemple de code¶
Code d’entrée :¶
Code généré¶
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0032¶
La propriété de colonne IDENTITY n’est pas prise en charge dans l’STATEMENT CREATE TABLE AS, émulée à l’aide de ROW_NUMBER().
Description¶
Snowflake ne possède pas de moyen direct d’effectuer CREATE TABLE AS avec une colonne d’identité. Pour autant, SnowConvert ajoute une colonne ROW_NUMBER à la place de IDENTITY pour simuler l’énumération de l’identité. Cette transformation ne crée pas de colonne d’identité, ce qui signifie que les lignes insérées après la création ne seront pas automatiquement incrémentées.
Exemple de code¶
Code d’entrée :¶
Code généré¶
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0033¶
SET QUOTED_IDENTIFIER STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE.
Description¶
SQL Server Behavior
In SQL Server, SET QUOTED_IDENTIFIER ON is a syntax setting that is separate from collation. The database’s or column’s collation (for example, _CI for Case-Insensitive or _CS for Case-Sensitive) dictates whether quoted identifiers are case-sensitive or not. If a database has a _CI collation, then « MyColumn » and « mycolumn » are treated as the same.
Snowflake Behavior
In Snowflake, the behavior is simpler and more strict:
Unquoted Identifiers: Automatically stored and resolved in all uppercase, making them case-insensitive (mytable is the same as MYTABLE).
Quoted Identifiers: By default, identifiers enclosed in double quotes (« MyColumn ») are case-sensitive. They are stored exactly as you typed them.
Exemple de code¶
Code d’entrée :¶
Code généré¶
How to Achieve Equivalence in Snowflake
To get the same case-insensitive behavior for quoted identifiers as in SQL Server, you can set the QUOTED_IDENTIFIERS_IGNORE_CASE session parameter to TRUE in Snowflake.
Meilleures pratiques¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0034¶
Description¶
This FDM is generated when a DATA_COMPRESSION clause is encountered in a CREATE TABLE or ALTER TABLE statement. In SQL Server, DATA_COMPRESSION is used to specify whether data should be compressed (using ROW or PAGE compression) to reduce storage space and improve I/O performance. Snowflake automatically handles data compression using its proprietary compression algorithms, making the DATA_COMPRESSION clause unnecessary and unsupported. SnowConvert comments out the DATA_COMPRESSION clause during conversion.
Example Code¶
Input (SQL Server):¶
Output (Snowflake):¶
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0035¶
ENABLE/DISABLE trigger is automatically handled by Snowflake.
Description¶
This FDM is generated when SnowConvert AI encounters an ALTER TABLE ... ENABLE TRIGGER or ALTER TABLE ... DISABLE TRIGGER statement. In SQL Server, triggers can be manually enabled or disabled per table. In Snowflake, trigger execution is automatically managed by the platform — there is no need (or ability) to manually enable or disable individual triggers. SnowConvert AI comments out the trigger clause and adds this FDM marker.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
No manual action is typically required. Snowflake manages trigger behavior automatically.
If your workflow relied on temporarily disabling triggers for bulk loads, consider using Snowflake streams and tasks as an alternative pattern.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0036¶
HOST_NAME replaced with CURRENT_IP_ADDRESS, which returns the client IP address instead of the workstation name.
Description¶
This FDM is generated when SnowConvert AI encounters the HOST_NAME() function. In SQL Server, HOST_NAME() returns the workstation name of the client connection. Snowflake does not have a direct equivalent; CURRENT_IP_ADDRESS() is used as the closest alternative, but it returns the client’s IP address rather than the hostname. This is a functional difference because the returned values have different formats and semantics.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
If your application uses
HOST_NAME()for auditing or logging, verify that the IP address provides sufficient information for your use case.If the workstation name is required, consider passing it as a session parameter via
ALTER SESSION SETor storing it in a context variable.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0037¶
SET statement is not applicable in Snowflake as it has equivalent default behavior.
Description¶
This FDM is generated when SnowConvert AI encounters a SET statement whose specified value matches Snowflake’s default behavior. For example, SET CONCAT_NULL_YIELDS_NULL ON is the default in Snowflake (NULL concatenation yields NULL), SET NUMERIC_ROUNDABORT OFF matches Snowflake’s default of not raising errors on precision loss, and SET ARITHABORT ON/OFF has no behavioral impact in Snowflake. Since the setting is already the default, the statement is commented out.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
No action is required — the commented-out statement reflects behavior that is already the default in Snowflake.
If the non-default value of the same option is used elsewhere (e.g.,
SET CONCAT_NULL_YIELDS_NULL OFF), that will generate a separate EWI (SSC-EWI-TS0089) because the non-default behavior cannot be replicated.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0038¶
Agent Job migrated to Snowflake Task orchestration.
Description¶
This FDM is generated when SnowConvert AI encounters an sp_add_job call that creates a SQL Server Agent Job containing SSIS package steps. The Agent Job definition is migrated to a Snowflake Task orchestration model. The original sp_add_job call is commented out and replaced with generated orchestration files in the ETL/AGENTJOBS/ output directory. The generated output includes Snowflake Task definitions, orchestrator stored procedures, and schedule mappings.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Review the generated files in the
ETL/AGENTJOBS/output directory. These include Snowflake Task definitions and orchestrator stored procedures that replace the Agent Job.Validate the task scheduling and step ordering match your original Agent Job configuration.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0039¶
Agent Job schedule mapped to CRON expression in Snowflake Task.
Description¶
This FDM is generated when SnowConvert AI encounters an sp_add_jobschedule or sp_add_schedule/sp_attach_schedule call that defines a schedule for a SQL Server Agent Job. The schedule parameters (freq_type, freq_interval, active_start_time) are mapped to a CRON expression for use in the corresponding Snowflake Task definition. The original schedule call is commented out.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Verify the generated CRON expression in the Snowflake Task definition matches your intended schedule. Complex SQL Server schedules (e.g., monthly on specific days, bi-weekly) may need manual adjustment.
Review the
ETL/AGENTJOBS/output for the generatedCREATE TASK ... SCHEDULE = 'USING CRON ...'statement.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0040¶
Agent Job step migrated to orchestrator Stored Procedure.
Description¶
This FDM is generated when SnowConvert AI encounters an sp_add_jobstep call for an Agent Job step with a TSQL or SSIS subsystem. The step is migrated to an orchestrator stored procedure that is generated in the ETL/AGENTJOBS/ output directory. The original sp_add_jobstep call is commented out. For SSIS steps, the SSIS package is also processed through SnowConvert AI’s ETL-to-dbt pipeline.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Review the generated orchestrator stored procedure in
ETL/AGENTJOBS/to ensure the step logic is correctly translated.For SSIS steps, also review the generated dbt models and SQL files produced by the ETL-to-dbt pipeline.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0041¶
sp_delete_job translated to DROP TASK IF EXISTS.
Description¶
This FDM is generated when SnowConvert AI encounters an sp_delete_job call for a SQL Server Agent Job that has been migrated to a Snowflake Task. The sp_delete_job call is translated to a DROP TASK IF EXISTS statement targeting the corresponding Snowflake Task. The task name is derived from the original job name with a TASK_ prefix and uppercase formatting.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Verify that the task name
TASK_{JOB_NAME}matches the task created by the Agent Job migration (SSC-FDM-TS0038).Note that dropping a task in Snowflake also removes its schedule. If the task has dependent tasks, those must be updated separately.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0042¶
sp_start_job translated to EXECUTE TASK.
Description¶
This FDM is generated when SnowConvert AI encounters an sp_start_job call for a SQL Server Agent Job that has been migrated to a Snowflake Task. The call is translated to an EXECUTE TASK statement that triggers the corresponding Snowflake Task immediately, regardless of its schedule.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
EXECUTE TASKtriggers a single immediate run of the task. It does not affect the task’s schedule or resume/suspend state.Ensure the task has been created and is in a
STARTEDstate if you also need it to run on schedule.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0043¶
sp_stop_job translated to ALTER TASK SUSPEND.
Description¶
This FDM is generated when SnowConvert AI encounters an sp_stop_job call for a SQL Server Agent Job that has been migrated to a Snowflake Task. The call is translated to ALTER TASK ... SUSPEND, which prevents future scheduled runs of the task. Note that ALTER TASK SUSPEND does not stop an already-running execution — it only prevents future runs from being triggered.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Be aware that
ALTER TASK SUSPENDonly prevents future scheduled executions. If the task is currently running, the in-progress execution will complete.In SQL Server,
sp_stop_jobattempts to cancel an in-progress job step. This capability does not exist in Snowflake’s Task model.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0044¶
sp_update_job @enabled translated to ALTER TASK RESUME or SUSPEND.
Description¶
This FDM is generated when SnowConvert AI encounters an sp_update_job call with the @enabled parameter for a SQL Server Agent Job that has been migrated to a Snowflake Task. When @enabled=1, the call is translated to ALTER TASK ... RESUME (starts the task’s schedule). When @enabled=0, it is translated to ALTER TASK ... SUSPEND (pauses the task’s schedule).
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Verify that
RESUMEandSUSPENDmap correctly to your intended enable/disable behavior.If
sp_update_jobis called with parameters other than@enabled(e.g.,@description), those calls will generate SSC-EWI-TS0093 instead, as metadata updates are not applicable in Snowflake’s Task model.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0046¶
Rowversion/timestamp data type auto-generates unique values in SQL Server but not in Snowflake.
Description¶
This FDM is generated when SnowConvert AI encounters a column with the ROWVERSION or TIMESTAMP data type (they are synonyms in SQL Server). In SQL Server, these data types automatically generate unique binary values on every INSERT and UPDATE, providing a mechanism for optimistic concurrency control. SnowConvert AI maps the type to BINARY(8), which preserves the storage format but does not replicate the auto-generation behavior.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
If your application uses
ROWVERSIONfor optimistic concurrency control, implement an alternative pattern in Snowflake. Options include:A
NUMBERcolumn with a Snowflake sequence, updated via a stream/task or stored procedure on each modification.A
TIMESTAMP_NTZcolumn set toCURRENT_TIMESTAMP()on insert/update using a default value and a stream-triggered task.
If the column is only used for auditing (not concurrency), a
TIMESTAMP_NTZ DEFAULT CURRENT_TIMESTAMP()column may suffice.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0047¶
SET IDENTITY_INSERT commented out.
Description¶
This FDM is generated when SnowConvert AI encounters a SET IDENTITY_INSERT ... ON or SET IDENTITY_INSERT ... OFF statement. In SQL Server, SET IDENTITY_INSERT ON allows explicit values to be inserted into an identity column, and OFF re-enables the automatic identity generation. In Snowflake, explicit inserts into IDENTITY/AUTOINCREMENT columns are allowed by default without any special setting. However, the sequence counter does not automatically adjust to account for explicitly inserted values, which may cause conflicts.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
After explicitly inserting values into an identity column in Snowflake, manually adjust the underlying sequence to avoid conflicts:
ALTER SEQUENCE seq_name SET START = <max_inserted_value + increment>.If you rely on toggling
IDENTITY_INSERTin batch load scripts, remove theSETstatements and add a sequence adjustment step at the end of the batch.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0047¶
SET IDENTITY_INSERT commented out.
Description¶
In SQL Server, SET IDENTITY_INSERT controls whether explicit values can be inserted into the identity column of a table. When set to ON, it allows explicit inserts; when set to OFF (the default), it prevents them.
In Snowflake, there is no equivalent statement because explicit inserts into IDENTITY / AUTOINCREMENT columns are always allowed by default. However, unlike SQL Server, the underlying sequence counter in Snowflake does not adjust to account for explicitly inserted values, which may lead to duplicate key conflicts on subsequent inserts.
SnowConvert AI comments out the SET IDENTITY_INSERT statement and attaches this FDM with a context-specific reason depending on whether the original statement was ON or OFF.
Exemple de code¶
SET IDENTITY_INSERT ON¶
Code d’entrée :¶
Code généré :¶
SET IDENTITY_INSERT OFF¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
After migration, verify that any tables with
IDENTITY/AUTOINCREMENTcolumns do not experience duplicate key conflicts caused by the sequence counter not reflecting explicitly inserted values.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0046¶
Rowversion/timestamp data type auto-generation behavior not replicated in Snowflake.
Description¶
In SQL Server, the rowversion data type (also known as timestamp) automatically generates a unique BINARY(8) value every time a row is inserted or updated. This is commonly used for optimistic concurrency control.
Snowflake does not have an equivalent mechanism. The rowversion/timestamp data type is mapped to BINARY(8), but Snowflake’s BINARY(8) column will not auto-generate unique values on INSERT or UPDATE. Any application logic that depends on auto-incrementing row version values will need to be revised.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Review any application logic that depends on
rowversion/timestampfor optimistic concurrency control and adjust accordingly.Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0053¶
WITH CHECK clause removed. Snowflake constraints are informational only and not enforced.
Description¶
This message is shown when an ALTER TABLE ... WITH CHECK ADD CONSTRAINT ... FOREIGN KEY ... statement is converted. SnowConvert AI removes the WITH CHECK clause because Snowflake constraints are informational and are not enforced, so the validation semantics do not apply.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Review whether the source workflow depended on SQL Server validating existing data when the constraint was added.
If validation is required after migration, implement an explicit data-quality check in Snowflake.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
SSC-FDM-TS0054¶
CHECK/NOCHECK CONSTRAINT statement removed. Enabling or disabling constraints is not applicable in Snowflake.
Description¶
This message is shown when ALTER TABLE ... CHECK CONSTRAINT ... or ALTER TABLE ... NOCHECK CONSTRAINT ... is converted. SnowConvert AI comments out the statement because Snowflake does not support enabling or disabling constraints in the same way SQL Server does.
Exemple de code¶
Code d’entrée :¶
Code généré :¶
Meilleures pratiques¶
Review any operational process that temporarily disables constraints during bulk loads or maintenance.
If the source process relied on constraint state transitions, redesign that workflow explicitly for Snowflake.
Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.