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
);
Copy
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"}}'
;
Copy

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;
Copy
Code généré :
 SELECT 'a' COLLATE 'EN-CI-AS' /*** SSC-FDM-TS0002 - COLLATION FOR VALUE WS NOT SUPPORTED ***/;
Copy

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 nametypeprivilegemapped login namepermission 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 ServerSnowFlake
account nameGRANTEE
typeROLE_OWNER
privilegeROLE_NAME
mapped login nameGRANTEE
permission pathNULL

Exemple de code

Code d’entrée :
 EXEC xp_logininfo

EXEC xp_logininfo 'USERNAME'
Copy
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'));
Copy

Meilleures pratiques

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'
);
Copy
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;
Copy

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 )');
Copy
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 )');
Copy

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;
Copy
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;
$$;
Copy

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;
Copy
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;
$$;
Copy

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) 
Copy
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) 
Copy

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'
        )
);
Copy
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"}}'
   ;
Copy

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);
Copy
Code généré :
 SELECT
CURRENT_DATABASE() /*** SSC-FDM-TS0010 - CURRENT_DATABASE function has different behavior in certain cases ***/;
Copy

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);
Copy
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)
                                           ;
Copy
Document headings start at H4, not H1 [myst.header]

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
);
Copy
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
$$;
Copy

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;
Copy
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;
$$;
Copy

Meilleures pratiques

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))
);
Copy
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"}}'
;
Copy

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
);
Copy
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"}}'
;
Copy

Meilleures pratiques

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;
Copy
 <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>
Copy
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;
Copy
 <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>
Copy

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);
Copy
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. ***/;
Copy

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
Copy
Code généré :
 ----** SSC-FDM-TS0018 - DATABASE CONSOLE COMMAND 'CHECKIDENT' IS NOT SUPPORTED. **
--DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS
Copy

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
Copy
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;
$$;
Copy

Recommandations

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;
Copy
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
                                                                              ;
Copy

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

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()');
Copy
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";
Copy

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

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)');
Copy
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";
Copy

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

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()
Copy
Code de sortie
 BEGIN
VARERRORMESSAGE := SQLERRM /*** SSC-FDM-TS0023 - ERROR MESSAGE COULD BE DIFFERENT IN SNOWFLAKE ***/;
END;
Copy

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';
Copy

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 ***/);
Copy

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';
Copy

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());
Copy

2024-02-08 16:33:49.143

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');
Copy

6

Code de sortie :
 SELECT
DB_ID_UDF('my_database') /*** SSC-FDM-TS0025 - DB_ID_UDF MAY HAVE A DIFFERENT BEHAVIOR IN CERTAIN CASES ***/;
Copy

6

Recommandations

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';
Copy
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';
Copy

Recommandations

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;
Copy
Code de sortie
 ----** SSC-FDM-TS0027 - SET ANSI_NULLS ON STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE **
--SET ANSI_NULLS ON
Copy

Recommandations

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
Copy
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;
$$;
Copy

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
Copy
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;
$$;
Copy

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