SnowConvert : différences fonctionnelles Transact-SQL¶
Supported Environments
[x] Microsoft SQL Server
[x] Microsoft Azure Synapse Analytics
SSC-FDM-TS0001¶
Note
Cette FDM a été supprimée. Pour plus d’informations, veuillez consulter SSC-EWI-TS0077.
Description¶
Cette erreur apparaît lorsque vous tentez d’utiliser une clause de classement qui n’est pas prise en charge par Snowflake.
Exemple de code¶
Code d’entrée :¶
SELECT 'a' COLLATE Albanian_BIN;
SELECT 'a' COLLATE Albanian_CI_AI;
CREATE TABLE ExampleTable (
ID INT,
Name VARCHAR(50) COLLATE collateName
);
Code généré :¶
SELECT 'a'
-- --** SSC-FDM-TS0001 - COLLATION Albanian_BIN NOT SUPPORTED **
-- COLLATE Albanian_BIN
;
SELECT 'a'
-- --** SSC-FDM-TS0001 - COLLATION Albanian_CI_AI NOT SUPPORTED **
-- COLLATE Albanian_CI_AI
;
CREATE OR REPLACE TABLE ExampleTable (
ID INT,
Name VARCHAR(50)
-- --** SSC-FDM-TS0001 - COLLATION collateName NOT SUPPORTED **
-- COLLATE collateName
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
Meilleures pratiques¶
Aucune action n’est requise de votre part.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0002¶
Description¶
Cette erreur apparaît lorsque vous utilisez une clause de classement qui n’est pas prise en charge par Snowflake.
Exemple de code¶
Code d’entrée :¶
SELECT 'a' COLLATE Latin1_General_CI_AS_WS;
Code généré :¶
SELECT 'a' COLLATE 'EN-CI-AS' /*** SSC-FDM-TS0002 - COLLATION FOR VALUE WS NOT SUPPORTED ***/;
Meilleures pratiques¶
Aucune action n’est requise de votre part.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0003¶
Description¶
Ce message apparaît lors de l’exécution de la procédure XP_LOGININFO, qui renvoie un ensemble spécifique de colonnes. Pour plus de références sur ces colonnes, vous pouvez vous référer à la documentation de SQL Server.
account name | type | privilege | mapped login name | permission path |
Pour connaître les rôles disponibles, vous pouvez effectuer une requête sur la vue APPLICABLE_ROLES dans Snowflake. Cette vue fournit un ensemble de colonnes contenant des informations sur les rôles. Pour plus de références, veuillez vous référer à la documentation de Snowflake.
GRANTEE |
ROLE_NAME |
ROLE_OWNER |
IS_GRANTABLE |
---|
Les colonnes sources de SQL Server sont mappées aux colonnes Snowflake comme indiqué dans la table suivante. Veuillez noter que ces mappages peuvent ne pas être des équivalents exacts.
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 :¶
EXEC xp_logininfo
EXEC xp_logininfo 'USERNAME'
Code généré :¶
--** SSC-FDM-TS0003 - XP_LOGININFO MAPPED TO CUSTOM UDF XP_LOGININFO_UDF AND MIGHT HAVE DIFFERENT BEHAVIOR **
SELECT
*
FROM
TABLE(XP_LOGININFO_UDF());
--** SSC-FDM-TS0003 - XP_LOGININFO MAPPED TO CUSTOM UDF XP_LOGININFO_UDF AND MIGHT HAVE DIFFERENT BEHAVIOR **
SELECT
*
FROM
TABLE(XP_LOGININFO_UDF('USERNAME'));
Meilleures pratiques¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0004¶
Description¶
Ce message apparaît lorsqu’une opération BULK INSERT
a été convertie et qu’une commande PUT
est incluse dans le code de sortie. Étant donné que la commande PUT
ne peut pas être exécutée via SnowSQL Web UI, les utilisateurs doivent avoir installé l’interface de ligne de commande Snowflake (SnowCLI) sur leur système avant d’exécuter cette commande.
Exemple de code¶
Code d’entrée :¶
BULK INSERT #temptable FROM 'path/to/file.txt'
WITH
(
FIELDTERMINATOR ='\t',
ROWTERMINATOR ='\n'
);
Code généré :¶
CREATE OR REPLACE FILE FORMAT FILE_FORMAT_638466175888203490
FIELD_DELIMITER = '\t'
RECORD_DELIMITER = '\n';
CREATE OR REPLACE STAGE STAGE_638466175888203490
FILE_FORMAT = FILE_FORMAT_638466175888203490;
--** SSC-FDM-TS0004 - PUT STATEMENT IS NOT SUPPORTED ON WEB UI. YOU SHOULD EXECUTE THE CODE THROUGH THE SNOWFLAKE CLI **
PUT file://path/to/file.txt @STAGE_638466175888203490 AUTO_COMPRESS = FALSE;
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "#temptable" **
COPY INTO T_temptable FROM @STAGE_638466175888203490/file.txt;
Meilleures pratiques¶
Installez l’interface de ligne de commande de Snowflake (SnowCLI).
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0005¶
Description¶
Ce détail de migration de fonction (FMD) est ajouté lorsqu’une opération TRY_CONVERT ou TRY_CAST de la base de données source ne peut pas être directement convertie en fonction TRY_CAST dans Snowflake.
La fonction TRY_CAST de Snowflake est limitée à la conversion d’expressions de type chaîne, tandis que les fonctions TRY_CONVERT
et TRY_CAST
du serveur SQL sont plus flexibles et peuvent convertir des expressions de n’importe quel type de données.
La conversion vers la fonction TRY_CAST
de Snowflake est actuellement limitée aux expressions de chaînes ou aux expressions qui peuvent être identifiées comme des chaînes en fonction de leur contexte.
Exemple de code¶
Code d’entrée :¶
SELECT TRY_CAST(14.85 AS INT);
SELECT TRY_CONVERT(VARCHAR, 1234);
SELECT TRY_CONVERT(CHAR, 1);
SELECT TRY_CONVERT(SQL_VARIANT, '2017-01-01 12:00:00');
SELECT TRY_CONVERT(GEOGRAPHY, 'LINESTRING(-122.360 47.656, -122.343 47.656 )');
Code généré :¶
SELECT
CAST(14.85 AS INT) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/;
SELECT
TO_VARCHAR(1234);
SELECT
TO_CHAR(1);
SELECT
TO_VARIANT('2017-01-01 12:00:00');
SELECT
TO_GEOGRAPHY('LINESTRING(-122.360 47.656, -122.343 47.656 )');
Meilleures pratiques¶
Aucune action n’est requise de votre part.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0006¶
Description¶
Ce message apparaît lorsque SnowConvert détecte une procédure contenant une clause EXECUTE AS 'user_name'
. Comme Snowflake ne prend pas en charge cette fonction, il est automatiquement converti en EXECUTE AS CALLER
.
Ce paramètre définit les autorisations de sécurité qui contrôlent l’exécution de la procédure.
Note
Pour plus d’informations sur les fonctionnalités des clauses, reportez-vous à la documentation.
Exemple de code¶
Code d’entrée :¶
CREATE PROCEDURE SelectAllCustomers
WITH EXECUTE AS 'user_name'
AS
BEGIN
SELECT * FROM Customers;
END;
Code généré :¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "Customers" **
CREATE OR REPLACE PROCEDURE SelectAllCustomers ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
--** SSC-FDM-TS0006 - EXECUTE AS 'user_name' CLAUSE DOES NOT EXIST IN SNOWFLAKE AND THE USER CALLING THE PROCEDURE SHOULD HAVE ALL THE REQUIRED PRIVILEGES **
AS
$$
DECLARE
ProcedureResultSet RESULTSET;
BEGIN
ProcedureResultSet := (
SELECT
*
FROM
Customers);
RETURN TABLE(ProcedureResultSet);
END;
$$;
Meilleures pratiques¶
Aucune action n’est requise de votre part.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0007¶
Description¶
Ce message apparaît lorsque SnowConvert détecte une procédure contenant une clause FOR REPLICATION
. Snowflake ne prenant pas en charge cette fonction, la clause est automatiquement supprimée lors de la conversion.
Cette procédure est spécifiquement conçue à des fins de réplication et ne peut pas être exécutée du côté de l’abonné.
Note
Pour plus d’informations sur les fonctionnalités de cette clause, veuillez vous référer à la documentation.
Exemple de code¶
Code d’entrée :¶
CREATE PROCEDURE SelectAllCustomers
WITH FOR REPLICATION
AS
BEGIN
SELECT * FROM Customers;
END;
Code généré :¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "Customers" **
CREATE OR REPLACE PROCEDURE SelectAllCustomers ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
--** SSC-FDM-TS0007 - FOR REPLICATION CLAUSE DOES NOT EXIST IN SNOWFLAKE **
AS
$$
DECLARE
ProcedureResultSet RESULTSET;
BEGIN
ProcedureResultSet := (
SELECT
*
FROM
Customers);
RETURN TABLE(ProcedureResultSet);
END;
$$;
Meilleures pratiques¶
Aucune action n’est requise de votre part.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0008¶
Description¶
Un avertissement apparaît lorsque la fonction FORMATMESSAGE
est détectée parce qu’elle a été remplacée par FORMATMESSAGE_UDF
. Veuillez noter que FORMATMESSAGE_UDF
peut ne pas gérer correctement tous les types de format et générer des erreurs dans certaines situations.
Les valeurs numériques négatives conserveront leur signe négatif au lieu d’être converties. Le spécificateur de format %I64d
n’est pas compatible avec les UDFs et génère une erreur lorsqu’il est utilisé.
Dans la fonction FORMATMESSAGE_UDF, une erreur se produit si le nombre d’arguments fournis ne correspond pas au nombre de caractères de remplissage dans le modèle de message.
Cette fonction définie par l’utilisateur (UDF) ne peut pas traiter les identificateurs de numéro de message.
Exemple de code¶
Code d’entrée :¶
SELECT FORMATMESSAGE('Unsigned int %u, %u', 50, -50); -- Unsigned int 50, 4294967246
SELECT FORMATMESSAGE('Unsigned octal %o, %o', 50, -50); -- Unsigned octal 62, 37777777716
SELECT FORMATMESSAGE('Unsigned hexadecimal %X, %x', -11, -50); -- Unsigned hexadecimal FFFFFFF5, ffffffce
SELECT FORMATMESSAGE('Unsigned octal with prefix: %#o', -50); -- Unsigned octal with prefix: 037777777716
SELECT FORMATMESSAGE('Unsigned hexadecimal with prefix: %#X, %x', -11,-50); -- Unsigned hexadecimal with prefix: 0XFFFFFFF5, ffffffce
SELECT FORMATMESSAGE('Bigint %I64d', 3000000000); -- Bigint 3000000000
SELECT FORMATMESSAGE('My message: %s %s %s', 'Hello', 'World'); -- My message: Hello World (null)
Code généré :¶
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned int %u, %u', ARRAY_CONSTRUCT(50, -50)); -- Unsigned int 50, 4294967246
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned octal %o, %o', ARRAY_CONSTRUCT(50, -50)); -- Unsigned octal 62, 37777777716
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned hexadecimal %X, %x', ARRAY_CONSTRUCT(-11, -50)); -- Unsigned hexadecimal FFFFFFF5, ffffffce
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned octal with prefix: %#o', ARRAY_CONSTRUCT(-50)); -- Unsigned octal with prefix: 037777777716
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned hexadecimal with prefix: %#X, %x', ARRAY_CONSTRUCT(-11, -50)); -- Unsigned hexadecimal with prefix: 0XFFFFFFF5, ffffffce
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Bigint %I64d', ARRAY_CONSTRUCT(3000000000)); -- Bigint 3000000000
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('My message: %s %s %s', ARRAY_CONSTRUCT('Hello', 'World')); -- My message: Hello World (null)
Meilleures pratiques¶
N’utilisez pas le caractère générique
%I64d
dans les messages.Utilisez un message direct sous forme de chaîne au lieu d’un ID de message comme premier argument.
Veillez à ce que le nombre de caractères génériques corresponde au nombre d’arguments qui suivent le message.
Pour toute assistance supplémentaire, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0009¶
Description¶
Cet avertissement apparaît lorsqu’une colonne est définie avec l’option ENCRYPTED WITH
. Étant donné que Snowflake ne prend pas en charge le chiffrement au niveau des colonnes, cette option sera supprimée au cours du processus de conversion et un message d’avertissement sera généré.
Exemple de code¶
Code d’entrée :¶
CREATE TABLE [SCHEMA1].[TABLE1] (
[COL1] NVARCHAR(60)
ENCRYPTED WITH (
COLUMN_ENCRYPTION_KEY = MyCEK,
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
)
);
Code généré :¶
CREATE OR REPLACE TABLE SCHEMA1.TABLE1 (
COL1 VARCHAR(60)
-- --** SSC-FDM-TS0009 - ENCRYPTED WITH NOT SUPPORTED IN SNOWFLAKE **
-- ENCRYPTED WITH (
-- COLUMN_ENCRYPTION_KEY = MyCEK,
-- ENCRYPTION_TYPE = RANDOMIZED,
-- ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
-- )
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
Meilleures pratiques¶
Aucune action n’est requise de votre part.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0010¶
Description¶
Cet avertissement apparaît lorsque la fonction DB_NAME de SQL Server est convertie en fonction CURRENT_DATABASE de Snowflake. Étant donné que la fonction CURRENT_DATABASE de Snowflake ne prend pas en charge les IDs de base de données en tant que paramètres et renvoie uniquement le nom de la base de données actuelle, cette conversion peut affecter le comportement de votre code.
Exemple de code¶
Code d’entrée :¶
SELECT DB_NAME(someId);
Code généré :¶
SELECT
CURRENT_DATABASE() /*** SSC-FDM-TS0010 - CURRENT_DATABASE function has different behavior in certain cases ***/;
Meilleures pratiques¶
Aucune action n’est requise de votre part.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0011¶
Note
Ce FDM n’est plus pris en charge. Pour plus d’informations, veuillez consulter SSC-EWI-TS0078.
Description¶
Cette erreur se produit lorsque des expressions telles que des appels de fonctions, des noms de variables ou des constantes nommées sont placées après la casse par défaut dans une instruction de commutation.
Snowflake n’accepte que des valeurs constantes explicites, telles que des nombres ou des chaînes, comme entrées directes.
Exemple de code¶
Code d’entrée :¶
ALTER TABLE
T_ALTERTABLETEST
ADD
COLUMN COL10 INTEGER DEFAULT RANDOM(10);
Code généré :¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "T_ALTERTABLETEST", "RANDOM" **
ALTER TABLE IF EXISTS T_ALTERTABLETEST
ADD
COLUMN COL10 INTEGER
-- --** SSC-FDM-TS0011 - DEFAULT OPTION NOT ALLOWED IN SNOWFLAKE **
-- DEFAULT RANDOM(10)
;
Document headings start at H4, not H1 [myst.header]¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0012¶
Description¶
Cet avertissement apparaît dans les fonctions définies par l’utilisateur pour les tables lorsque le système ne peut pas déterminer le type de retour d’une colonne pendant la conversion. Dans ces cas, STRING
est automatiquement utilisé comme type par défaut pour correspondre à l’opération CAST
dans l’instruction SELECT
.
Exemple de code¶
Code d’entrée :¶
CREATE FUNCTION GetDepartmentInfo()
RETURNS TABLE
AS
RETURN
(
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
);
Code généré :¶
CREATE OR REPLACE FUNCTION GetDepartmentInfo ()
RETURNS TABLE(
DepartmentID STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN DepartmentID WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/,
Name STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN Name WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/,
GroupName STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN GroupName WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
AS
$$
SELECT
CAST(DepartmentID AS STRING),
CAST(Name AS STRING),
CAST(GroupName AS STRING)
FROM
HumanResources.Department
$$;
Meilleures pratiques¶
Vérifiez le type de données qui n’a pas pu être trouvé et mettez-le à jour dans l’instruction
RETURNS TABLE
.Pour toute assistance supplémentaire, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0013¶
Description¶
Cet avertissement apparaît lorsque le code source contient des curseurs qui peuvent être modifiés. Dans Snowflake Scripting, les lignes de curseur sont en lecture seule et ne peuvent pas être modifiées.
Exemple de code :¶
Code d’entrée :¶
CREATE OR ALTER PROCEDURE modifiablecursorTest
AS
BEGIN
-- Should be marked with SSC-FDM-TS0013
DECLARE CursorVar CURSOR
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar2 INSENSITIVE CURSOR
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar3 CURSOR KEYSET SCROLL_LOCKS
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar4 CURSOR DYNAMIC OPTIMISTIC
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar6 CURSOR STATIC
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar7 CURSOR READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
-- Shouid not be marked
DECLARE CursorVar5 CURSOR STATIC READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
RETURN 'DONE';
END;
Code généré :¶
CREATE OR REPLACE PROCEDURE modifiablecursorTest ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
-- Should be marked with SSC-FDM-TS0013
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar2 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar3 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar4 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar6 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar7 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
-- Shouid not be marked
CursorVar5 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
BEGIN
RETURN 'DONE';
END;
$$;
Meilleures pratiques¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0014¶
Description¶
Un avertissement apparaît lors de la conversion d’une colonne calculée de SQL Server vers Snowflake. Cet avertissement indique que la fonctionnalité pourrait ne pas être exactement la même dans Snowflake que dans SQL Server.
Exemple de code¶
Code d’entrée :¶
CREATE TABLE [TestTable](
[Col1] AS (CONVERT ([REAL], ExpressionValue))
);
Code généré :¶
CREATE OR REPLACE TABLE TestTable (
Col1 REAL AS (CAST(ExpressionValue AS REAL)) /*** SSC-FDM-TS0014 - COMPUTED COLUMN WAS TRANSFORMED TO ITS SNOWFLAKE EQUIVALENT, FUNCTIONAL EQUIVALENCE VERIFICATION PENDING. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
Meilleures pratiques¶
Ce message est destiné à votre information. Aucune action n’est nécessaire.
Ajustez manuellement les expressions qui n’ont pas été transformées automatiquement.
Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0015¶
Description¶
Cet avertissement apparaît lorsque le type de données d’une colonne de SQL Server n’est pas pris en charge par Snowflake.
Exemple de code¶
Code d’entrée :¶
CREATE TABLE table1
(
column1 type1
);
Code généré :¶
CREATE OR REPLACE TABLE table1
(
column1 VARIANT /*** SSC-FDM-TS0015 - DATA TYPE TYPE1 IS NOT SUPPORTED IN SNOWFLAKE ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
Meilleures pratiques¶
Consultez la documentation sur les types de données de Snowflake pour trouver le type de données correspondant à vos besoins.
Pour toute assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0016¶
Description¶
Cet avertissement apparaît lors de la conversion d’une clause SQL Server FOR XML vers Snowflake. Cela indique que l’ordre des colonnes dans la sortie XML peut différer entre les deux plateformes.
Exemple de code¶
Avec une table échantillon nommée employee
comme indiqué ci-dessous.
Id |
Nom |
Hint |
---|---|---|
1 |
Kinslee Park |
Développeur |
2 |
Ezra Mata |
Développeur |
3 |
Aliana Quinn |
Manager |
Code d’entrée :¶
SELECT
e.id,
e.name as full_name,
e.hint
FROM
employee e
FOR XML PATH;
<row>
<id>1</id>
<full_name>Kinslee Park</full_name>
<hint>Developer</hint>
</row>
<row>
<id>2</id>
<full_name>Ezra Mata</full_name>
<hint>Developer</hint>
</row>
<row>
<id>3</id>
<full_name>Aliana Quinn</full_name>
<hint>Manager</hint>
</row>
Code généré :¶
SELECT
--** SSC-FDM-TS0016 - XML COLUMNS IN SNOWFLAKE MIGHT HAVE A DIFFERENT FORMAT **
FOR_XML_UDF(OBJECT_CONSTRUCT('id', e.id, 'full_name', e.name, 'hint', e.hint), 'row')
FROM
employee e;
<row type="OBJECT">
<full_name type="VARCHAR">Kinslee Park</full_name>
<hint type="VARCHAR">Developer</hint>
<id type="INTEGER">1</id>
</row>
<row type="OBJECT">
<full_name type="VARCHAR">Ezra Mata</full_name>
<hint type="VARCHAR">Developer</hint>
<id type="INTEGER">2</id>
</row>
<row type="OBJECT">
<full_name type="VARCHAR">Aliana Quinn</full_name>
<hint type="VARCHAR">Manager</hint>
<id type="INTEGER">3</id>
</row>
Meilleures pratiques¶
Il s’agit d’un message d’information. Aucune action n’est requise.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0017¶
Description¶
Cet avertissement apparaît lorsque des fonctions telles que SUSER_NAME
ou SUSER_SNAME
incluent un paramètre d’identificateur d’utilisateur, car la fonction CURRENT_USER de Snowflake ne prend pas en charge les paramètres d’utilisateur.
Code d’entrée :¶
SELECT SUSER_NAME(0x010500000000000515000000a065cf7e784b9b5fe77c87705a2e0000);
Code généré :¶
SELECT
CURRENT_USER() /*** SSC-FDM-TS0017 - User ID parameter used in SUSER_NAME function is not supported in CURRENT_USER function and it was removed. ***/;
Meilleures pratiques¶
Aucune action n’est requise de votre part.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0018¶
Note
Ce FDM n’est plus pris en charge. Pour plus d’informations, veuillez consulter SSC-EWI-TS0079.
Description¶
Ce détail de migration des fonctions (FMD) apparaît lorsque SnowConvert détecte une instruction DBCC (Database Console Command) dans le code source. Veuillez noter que Snowflake ne prend pas en charge la plupart des instructions DBCC.
Exemple de code¶
Code d’entrée :¶
DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS
Code généré :¶
----** SSC-FDM-TS0018 - DATABASE CONSOLE COMMAND 'CHECKIDENT' IS NOT SUPPORTED. **
--DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS
Recommandations¶
Il s’agit d’un message d’information. Aucune action n’est requise.
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0019¶
Gravité¶
Mauvaise
Description¶
Cet avertissement indique que le message d’erreur RAISERROR peut être différent en raison des règles de formatage des chaînes de SQL Server.
Exemple de code¶
Code d’entrée :¶
CREATE PROCEDURE RAISERROR_PROCEDURE
AS
BEGIN
RAISERROR ('This is a sample error message with the first parameter %d and the second parameter %*.*s',
10,
1,
123,
7,
7,
'param2');
END
Code généré :¶
CREATE OR REPLACE PROCEDURE RAISERROR_PROCEDURE ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
--** SSC-FDM-TS0019 - RAISERROR ERROR MESSAGE MAY DIFFER BECAUSE OF THE SQL SERVER STRING FORMAT **
SELECT
RAISERROR_UDF('This is a sample error message with the first parameter %d and the second parameter %*.*s',
10,
1, array_construct(
123,
7,
7,
'param2'));
END;
$$;
Recommandations¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0020¶
Description¶
Ce marqueur de détection de fonction (FDM) est déclenché lorsqu’une contrainte par défaut est trouvée dans une instruction de modification de table.
Actuellement, ce type de contraintes n’est pas pris en charge. Pour contourner cette limite, vous devez définir la table avant d’utiliser la commande Alter Table. Cette approche permet à SnowConvert d’identifier les références, et la contrainte par défaut sera incluse dans la définition de la table. Si vous ne suivez pas cette approche, la contrainte n’apparaîtra que sous la forme d’un commentaire dans le code.
Exemple de code¶
Code d’entrée :¶
CREATE TABLE table1(
col1 integer,
col2 varchar collate Latin1_General_CS,
col3 date
);
ALTER TABLE table1
ADD col4 integer,
CONSTRAINT col1_constraint DEFAULT 50 FOR col1,
CONSTRAINT col1_constraint DEFAULT (getdate()) FOR col1;
Code de sortie :¶
CREATE OR REPLACE TABLE table1 (
col1 INTEGER DEFAULT 50,
col2 VARCHAR COLLATE 'EN-CS',
col3 DATE
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
ALTER TABLE table1
ADD col4 INTEGER;
----** SSC-FDM-TS0020 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION **
--ALTER TABLE table1
--ADD
--CONSTRAINT col1_constraint DEFAULT 50 FOR col1
;
----** SSC-FDM-TS0020 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION **
--ALTER TABLE table1
--ADD
--CONSTRAINT col1_constraint DEFAULT (CURRENT_TIMESTAMP() :: TIMESTAMP) FOR col1
;
Problèmes connus¶
Si plusieurs contraintes par défaut sont définies pour la même colonne, seule la première apparaîtra dans l’instruction de création de table.
Si une contrainte par défaut fait référence à une colonne qui n’existe pas, la transformation échouera car la colonne requise est manquante.
Recommandations¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0021¶
Gravité¶
Mauvaise
Note
Pour une meilleure lisibilité, nous avons simplifié certaines sections du code dans cet exemple.
Description¶
Cet EWI apparaît lorsqu’une instruction Alter Table contient une clause MASKED WITH. Il indique que le système a créé une MASKING POLICY approximative pour remplacer la fonction MASKED WITH.
Exemple de code¶
Code d’entrée :¶
ALTER TABLE table_name
ALTER COLUMN column_name
ADD MASKED WITH (FUNCTION = 'default()');
Code de sortie :¶
--** SSC-FDM-TS0022 - MASKING ROLE MUST BE DEFINED PREVIOUSLY BY THE USER **
CREATE OR REPLACE MASKING POLICY "default" AS
(val STRING)
RETURNS STRING ->
CASE
WHEN current_role() IN ('YOUR_DEFINED_ROLE_HERE')
THEN val
ELSE 'xxxxx'
END;
ALTER TABLE IF EXISTS table_name MODIFY COLUMN column_name/*** SSC-FDM-TS0021 - A MASKING POLICY WAS CREATED AS SUBSTITUTE FOR MASKED WITH ***/ SET MASKING POLICY "default";
Note
MASKING POLICY doit être créé avant l’exécution de l’instruction ALTER TABLE. Veuillez noter que le comportement peut ne pas être exactement le même que celui du système source et que vous devrez peut-être ajuster les rôles et les privilèges des utilisateurs en conséquence.
Recommandations¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0022¶
Gravité¶
Mauvaise
Note
Pour une meilleure lisibilité, nous avons simplifié certaines sections du code dans cet exemple.
Description¶
Cette erreur se produit lorsque MASKING POLICY nécessite l’attribution de rôles ou de privilèges spécifiques pour que le masquage des données fonctionne correctement.
Exemple de code¶
Code d’entrée¶
ALTER TABLE tableName
ALTER COLUMN columnName
ADD MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)');
Code généré :¶
--** SSC-FDM-TS0022 - MASKING ROLE MUST BE DEFINED PREVIOUSLY BY THE USER **
CREATE OR REPLACE MASKING POLICY "partial_1_xxxxx_1" AS
(val STRING)
RETURNS STRING ->
CASE
WHEN current_role() IN ('YOUR_DEFINED_ROLE_HERE')
THEN val
ELSE LEFT(val, 1) || 'xxxxx' || RIGHT(val, 1)
END;
ALTER TABLE IF EXISTS tableName MODIFY COLUMN columnName/*** SSC-FDM-TS0021 - A MASKING POLICY WAS CREATED AS SUBSTITUTE FOR MASKED WITH ***/ SET MASKING POLICY "partial_1_xxxxx_1";
Note
À la ligne 6, vous pouvez ajouter une ou plusieurs valeurs de rôle séparées par des virgules. Chaque valeur de rôle doit être placée entre guillemets simples.
Recommandations¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0023¶
Gravité¶
Mauvaise
Description¶
Cet avertissement apparaît lors de la transformation de la fonction ERROR_MESSAGE(). Veuillez noter que le message d’erreur exact peut être différent dans Snowflake.
Code d’entrée :¶
SET @varErrorMessage = ERROR_MESSAGE()
Code de sortie¶
BEGIN
VARERRORMESSAGE := SQLERRM /*** SSC-FDM-TS0023 - ERROR MESSAGE COULD BE DIFFERENT IN SNOWFLAKE ***/;
END;
Recommandation¶
Si vous avez besoin d’une aide supplémentaire, veuillez contacter notre équipe de support à l’adresse suivante : snowconvert-support@snowflake.com.
SSC-FDM-TS0024¶
Description¶
Ce mécanisme de détection de fonction (FDM) est déclenché lorsque At Time Zone
est utilisé avec CURRENT_TIMESTAMP
. Cette vérification est nécessaire car les résultats peuvent varier dans certains cas.
La différence clé entre SQL Server et la fonction CURRENT_TIMESTAMP de Snowflake est la gestion des fuseaux horaires :
SQL Server : renvoie la date et l’heure du système en fonction du fuseau horaire local du serveur
Snowflake : renvoie la date et l’heure en UTC (Coordinated Universal Time)
Code d’entrée :¶
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
2024-02-08 16:52:55.317 -10:00
Code de sortie :¶
SELECT
CONVERT_TIMEZONE('Pacific/Honolulu', CURRENT_TIMESTAMP() /*** SSC-FDM-TS0024 - CURRENT_TIMESTAMP in At Time Zone statement may have a different behavior in certain cases ***/);
2024-02-08 06:53:46.994 -1000
Recommandations¶
Voici un exemple de la manière de maintenir un formatage cohérent dans Snowflake.
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
2024-02-08 16:33:49.143 -10:00
Dans Snowflake, vous pouvez modifier le fuseau horaire par défaut en utilisant la commande ALTER SESSION. Par exemple :
ALTER SESSION SET TIMEZONE = 'Pacific/Honolulu';
SELECT
CONVERT_TIMEZONE('Pacific/Honolulu', 'UTC', CURRENT_TIMESTAMP());
2024-02-08 16:33:49.143
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0025¶
Description¶
Ce Function Design Memo (FDM) explique comment la fonction DB_ID_UDF vise à répliquer le comportement de la fonction DB_ID de SQL Server. Alors que SQL Server attribue aux bases de données des identificateurs permanents et uniques qui ne sont jamais réutilisés, Snowflake gère différemment la base de données IDs. Dans Snowflake, les IDs de la base de données sont constitués de numéros séquentiels attribués lors de la création. Si une base de données est supprimée, son numéro d’ID devient disponible et sera attribué à la prochaine base de données nouvellement créée.
Code d’entrée :¶
SELECT DB_ID('my_database');
6
Code de sortie :¶
SELECT
DB_ID_UDF('my_database') /*** SSC-FDM-TS0025 - DB_ID_UDF MAY HAVE A DIFFERENT BEHAVIOR IN CERTAIN CASES ***/;
6
Recommandations¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0026¶
Description¶
Lors de la transformation d’une instruction INSERT qui inclut un facteur de table DML, une table temporaire doit être créée. Notez que ce message de détection de fonction (FDM) indique que les opérations DELETE ne sont pas incluses dans cette transformation. Pour plus de détails sur ce modèle, veuillez vous référer à INSERT avec facteur DML de table avec MERGE en tant que DML .
Code d’entrée :¶
INSERT INTO T3
SELECT
col1,
col2
FROM (
MERGE T1 USING T2
ON T1.col1 = T2.col1
WHEN NOT MATCHED THEN
INSERT VALUES ( T2.col1, T2.col2 )
WHEN MATCHED THEN
UPDATE SET T1.col2 = t2.col2
OUTPUT
$action ACTION_OUT,
T2.col1,
T2.col2
) AS MERGE_OUT
WHERE ACTION_OUT='UPDATE';
Code de sortie :¶
--** SSC-FDM-TS0026 - DELETE CASE IS NOT BEING CONSIDERED, PLEASE CHECK IF THE ORIGINAL MERGE PERFORMS IT **
CREATE OR REPLACE TEMPORARY TABLE MERGE_OUT AS
SELECT
CASE
WHEN T1.$1 IS NULL
THEN 'INSERT'
ELSE 'UPDATE'
END ACTION_OUT,
T2.col1,
T2.col2
FROM
T2
LEFT JOIN
T1
ON T1.col1 = T2.col1;
MERGE INTO T1
USING T2
ON T1.col1 = T2.col1
WHEN NOT MATCHED THEN
INSERT VALUES (T2.col1, T2.col2)
WHEN MATCHED THEN
UPDATE SET
T1.col2 = t2.col2
!!!RESOLVE EWI!!! /*** SSC-EWI-0021 - OUTPUT CLAUSE NOT SUPPORTED IN SNOWFLAKE ***/!!!
OUTPUT
$action ACTION_OUT,
T2.col1,
T2.col2 ;
INSERT INTO T3
SELECT
col1,
col2
FROM
MERGE_OUT
WHERE
ACTION_OUT ='UPDATE';
Recommandations¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0027¶
Description¶
Cette constatation lors de la migration (FDM) vous avertit que l’instruction SET ANSI_NULLS ON
peut fonctionner différemment dans Snowflake par rapport à la base de données source. Pour des informations détaillées sur cette instruction, veuillez consulter la documentation ANSI_NULLS.
Code d’entrée¶
SET ANSI_NULLS ON;
Code de sortie¶
----** SSC-FDM-TS0027 - SET ANSI_NULLS ON STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE **
--SET ANSI_NULLS ON
Recommandations¶
Pour une assistance supplémentaire, veuillez nous contacter à l’adresse suivante : snowconvert-support@snowflake.com
SSC-FDM-TS0028¶
Description¶
Cette notification indique que lors de l’utilisation de SP_EXECUTESQL, les paramètres de sortie doivent être listés dans la même séquence que celle dans laquelle ils apparaissent dans la chaîne SQL en cours d’exécution. Si l’ordre est différent, les valeurs de sortie seront mal attribuées.
Exemple de code¶
Cas correct¶
L’ordre des paramètres @MaxAgeOUT
et @MaxIdOUT
correspond à la fois à la chaîne de requête SQL et à la définition des paramètres de sortie.
Lors de la conversion du code, l’instruction SELECT $1, $2 INTO:MAXAGE, :MAXID FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
stockera les valeurs des colonnes $1 et $2 dans les variables MAXAGE et MAXID respectivement.
Transact¶
CREATE PROCEDURE CORRECT_OUTPUT_PARAMS_ORDER
AS
BEGIN
DECLARE @MaxAge INT;
DECLARE @MaxId INT;
EXECUTE sp_executesql
N'SELECT @MaxAgeOUT = max(AGE), @MaxIdOut = max(ID) FROM PERSONS WHERE ID < @id AND AGE < @age;',
N'@age INT, @id INT, @MaxAgeOUT INT OUTPUT, @MaxIdOUT INT OUTPUT',
30,
100,
@MaxAgeOUT = @MaxAge OUTPUT,
@MaxIdOut = @MaxId OUTPUT;
SELECT @MaxAge, @MaxId;
END
Snowflake¶
CREATE OR REPLACE PROCEDURE CORRECT_OUTPUT_PARAMS_ORDER ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/07/2024" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
MAXAGE INT;
MAXID INT;
ProcedureResultSet RESULTSET;
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE TRANSFORM_SP_EXECUTE_SQL_STRING_UDF('SELECT
MAX(AGE),
MAX(ID) FROM
PERSONS
WHERE
ID < @id AND AGE < @age;', '@age INT, @id INT, @MaxAgeOUT INT OUTPUT, @MaxIdOUT INT OUTPUT', ARRAY_CONSTRUCT('', '', 'MAXAGEOUT', 'MAXIDOUT'), ARRAY_CONSTRUCT(
30,
100, :MAXAGE, :MAXID));
--** SSC-FDM-TS0028 - OUTPUT PARAMETERS MUST HAVE THE SAME ORDER AS THEY APPEAR IN THE EXECUTED CODE **
SELECT
$1,
$2
INTO
:MAXAGE,
:MAXID
FROM
TABLE(RESULT_SCAN(LAST_QUERY_ID()));
ProcedureResultSet := (
SELECT
:MAXAGE,
:MAXID);
RETURN TABLE(ProcedureResultSet);
END;
$$;
Problèmes courants¶
L’ordre des paramètres de sortie @MaxAgeOUT
et @MaxIdOUT
dans la définition de la procédure stockée diffère de leur ordre dans la chaîne de requête SQL.
Par conséquent, lors de la conversion du code, l’instruction SELECT $1, $2 INTO:MAXID, :MAXAGE FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
attribuera des valeurs dans un ordre inattendu. La valeur de Max(AGE)
sera attribuée à :MAXID
, tandis que Max(ID)
sera attribuée à :MAXAGE
, ce qui est le contraire de ce qui est prévu.
Ce problème peut être résolu en ajustant l’ordre des paramètres de sortie dans l’instruction SELECT INTO ou en modifiant l’ordre dans la chaîne SQL pour qu’il corresponde.
Transact¶
CREATE PROCEDURE INCORRECT_OUTPUT_PARAMS_ORDER
AS
BEGIN
DECLARE @MaxAge INT;
DECLARE @MaxId INT;
EXECUTE sp_executesql
N'SELECT @MaxAgeOUT = max(AGE), @MaxIdOut = max(ID) FROM PERSONS WHERE ID < @id AND AGE < @age;',
N'@age INT, @id INT, @MaxAgeOUT INT OUTPUT, @MaxIdOUT INT OUTPUT',
30,
100,
@MaxIdOut = @MaxId OUTPUT,
@MaxAgeOUT = @MaxAge OUTPUT;
SELECT @MaxAge, @MaxId;
END
Snowflake¶
CREATE OR REPLACE PROCEDURE INCORRECT_OUTPUT_PARAMS_ORDER ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/07/2024" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
MAXAGE INT;
MAXID INT;
ProcedureResultSet RESULTSET;
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE TRANSFORM_SP_EXECUTE_SQL_STRING_UDF('SELECT
MAX(AGE),
MAX(ID) FROM
PERSONS
WHERE
ID < @id AND AGE < @age;', '@age INT, @id INT, @MaxAgeOUT INT OUTPUT, @MaxIdOUT INT OUTPUT', ARRAY_CONSTRUCT('', '', 'MAXIDOUT', 'MAXAGEOUT'), ARRAY_CONSTRUCT(
30,
100, :MAXID, :MAXAGE));
--** SSC-FDM-TS0028 - OUTPUT PARAMETERS MUST HAVE THE SAME ORDER AS THEY APPEAR IN THE EXECUTED CODE **
SELECT
$1,
$2
INTO
:MAXID,
:MAXAGE
FROM
TABLE(RESULT_SCAN(LAST_QUERY_ID()));
ProcedureResultSet := (
SELECT
:MAXAGE,
:MAXID);
RETURN TABLE(ProcedureResultSet);
END;
$$;
Recommandations¶
Veillez à ce que les paramètres de OUTPUT correspondent à leur ordre d’apparition dans la chaîne SQL.
Pour toute assistance supplémentaire, contactez-nous à l’adresse suivante : snowconvert-support@snowflake.com