SnowConvert: Transact-SQL-Funktionsunterschiede

Supported Environments
  • [x] Microsoft SQL Server

  • [x] Microsoft Azure Synapse Analytics

SSC-FDM-TS0001

Bemerkung

Diese FDM ist veraltet. Weitere Informationen finden Sie unter SSC-EWI-TS0077.

Beschreibung

Dieser Fehler tritt auf, wenn Sie versuchen, eine Sortierklausel zu verwenden, die Snowflake nicht unterstützt.

Codebeispiel

Eingabecode:
 SELECT 'a' COLLATE Albanian_BIN;

SELECT 'a' COLLATE Albanian_CI_AI;

CREATE TABLE ExampleTable (
    ID INT,
    Name VARCHAR(50) COLLATE collateName
);
Copy
Generierter Code:
 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

Best Practices

SSC-FDM-TS0002

Beschreibung

Dieser Fehler tritt auf, wenn Sie eine Sortierungsklausel verwenden, die Snowflake nicht unterstützt.

Codebeispiel

Eingabecode:
 SELECT 'a' COLLATE Latin1_General_CI_AS_WS;
Copy
Generierter Code:
 SELECT 'a' COLLATE 'EN-CI-AS' /*** SSC-FDM-TS0002 - COLLATION FOR VALUE WS NOT SUPPORTED ***/;
Copy

Best Practices

SSC-FDM-TS0003

Beschreibung

Diese Meldung erscheint, wenn Sie die XP_LOGININFO-Prozedur ausführen, die eine bestimmte Gruppe von Spalten zurückgibt. Weitere Einzelheiten zu diesen Spalten finden Sie in der Dokumentation zu SQL Server.

account nametypeprivilegemapped login namepermission path

Um die verfügbaren Rollen zu verstehen, können Sie in Snowflake die Ansicht APPLICABLE_ROLES abfragen. Diese Ansicht enthält eine Reihe von Spalten mit Rolleninformationen. Weitere Einzelheiten entnehmen Sie bitte der Snowflake-Dokumentation.

GRANTEE

ROLE_NAME

ROLE_OWNER

IS_GRANTABLE

Die Zuordnung von SQL Server-Quellspalten zu Snowflake-Spalten ist in der folgenden Tabelle dargestellt. Bitte beachten Sie, dass diese Zuordnungen möglicherweise nicht genau gleichwertig sind.

SQL ServerSnowFlake
account nameGRANTEE
typeROLE_OWNER
privilegeROLE_NAME
mapped login nameGRANTEE
permission pathNULL

Beispielcode

Eingabecode:
 EXEC xp_logininfo

EXEC xp_logininfo 'USERNAME'
Copy
Generierter Code:
 --** 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

Best Practices

SSC-FDM-TS0004

Beschreibung

Diese Meldung erscheint, wenn eine BULK INSERT-Operation konvertiert wurde und ein PUT-Befehl im Ausgabecode enthalten ist. Da der PUT-Befehl nicht über das die SnowSQL-Web-UI ausgeführt werden kann, müssen Benutzer die Snowflake-Befehlszeilenschnittstelle (SnowCLI) auf ihrem System installiert haben, bevor sie diesen Befehl ausführen.

Codebeispiel

Eingabecode:
 BULK INSERT #temptable FROM 'path/to/file.txt'  
WITH
(
   FIELDTERMINATOR ='\t',  
   ROWTERMINATOR ='\n'
);
Copy
Generierter Code:
 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

Best Practices

  • Installieren Sie die Snowflake-Befehlszeilenschnittstelle (SnowCLI).

  • Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-TS0005

Beschreibung

Dieses Featuremigrationsdetail (FMD) wird hinzugefügt, wenn eine TRY_CONVERT- oder TRY_CAST-Operation aus der Quelldatenbank nicht direkt in eine TRY_CAST-Funktion in Snowflake konvertiert werden kann.

Die Snowflake-Funktion TRY_CAST ist darauf beschränkt, nur Zeichenfolgenausdrücke zu konvertieren, während die Funktionen TRY_CONVERT und TRY_CAST von SQL Server flexibler sind und Ausdrücke jedes Datentyps konvertieren können.

Die Konvertierung in die Snowflake-Funktion TRY_CAST ist derzeit auf Zeichenfolgenausdrücke oder Ausdrücke beschränkt, die aufgrund ihres Kontexts als Zeichenfolgen identifiziert werden können.

Codebeispiel

Eingabecode:
 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
Generierter Code:
 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

Best Practices

SSC-FDM-TS0006

Beschreibung

Diese Meldung erscheint, wenn SnowConvert eine Prozedur entdeckt, die eine EXECUTE AS 'user_name'-Klausel enthält. Da Snowflake dieses Feature nicht unterstützt, wird es automatisch in EXECUTE AS CALLER konvertiert.

Dieser Parameter definiert die Sicherheitsberechtigungen, die die Ausführung der Prozedur steuern.

Bemerkung

Weitere Informationen über die Funktionalität der Klausel finden Sie in der Dokumentation.

Codebeispiel

Eingabecode:
 CREATE PROCEDURE SelectAllCustomers
WITH EXECUTE AS 'user_name'
AS
BEGIN
      SELECT * FROM Customers;
END;
Copy
Generierter Code:
 --** 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

Best Practices

SSC-FDM-TS0007

Beschreibung

Diese Meldung erscheint, wenn SnowConvert eine Prozedur erkennt, die eine FOR REPLICATION-Klausel enthält. Da Snowflake dieses Feature nicht unterstützt, wird die Klausel bei der Konvertierung automatisch entfernt.

Dieses Verfahren ist speziell für Replikationszwecke gedacht und kann nicht auf der Abonnentenseite ausgeführt werden.

Bemerkung

Weitere Informationen zur Funktionalität dieser Klausel finden Sie in der Dokumentation.

Codebeispiel

Eingabecode:
 CREATE PROCEDURE SelectAllCustomers
WITH FOR REPLICATION
AS
BEGIN
      SELECT * FROM Customers;
END;
Copy
Generierter Code:
 --** 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

Best Practices

SSC-FDM-TS0008

Beschreibung

Eine Warnung erscheint, wenn die Funktion FORMATMESSAGE erkannt wird, weil sie durch FORMATMESSAGE_UDF ersetzt wurde. Bitte beachten Sie, dass FORMATMESSAGE_UDF möglicherweise nicht alle Formattypen korrekt verarbeitet und in bestimmten Situationen Fehler erzeugen kann.

Negative numerische Werte behalten ihr negatives Vorzeichen und werden nicht konvertiert. Die Formatspezifikation %I64d ist nicht mit UDFs kompatibel und führt zu einem Fehler, wenn sie verwendet wird.

In der FORMATMESSAGE_UDF-Funktion tritt ein Fehler auf, wenn die Anzahl der angegebenen Argumente nicht mit der Anzahl der Platzhalter in der Meldungsvorlage übereinstimmt.

Diese benutzerdefinierte Funktion (UDF) kann keine Meldungsnummerbezeichner verarbeiten.

Codebeispiel

Eingabecode:
 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
Generierter Code:
 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

Best Practices

  • Verwenden Sie in Meldungen nicht den Platzhalter %I64d.

  • Verwenden Sie eine direkte Zeichenfolgenmeldung anstelle einer Meldungs-ID als erstes Argument.

  • Stellen Sie sicher, dass die Anzahl der Platzhalter mit der Anzahl der Argumente übereinstimmt, die der Meldung folgen.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com

SSC-FDM-TS0009

Beschreibung

Diese Warnung erscheint, wenn eine Spalte mit der Option ENCRYPTED WITH definiert wurde. Da Snowflake keine Verschlüsselung auf Spaltenebene unterstützt, wird diese Option während des Konvertierungsprozesses entfernt und eine Warnmeldung ausgegeben.

Codebeispiel

Eingabecode:
 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
Generierter Code:
 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

Best Practices

SSC-FDM-TS0010

Beschreibung

Diese Warnung erscheint, wenn die SQL Server-Funktion DB_NAME in die Funktion CURRENT_DATABASE von Snowflake konvertiert wird. Da die Snowflake-Funktion CURRENT_DATABASE keine Datenbank-IDs als Parameter unterstützt und nur den Namen der aktuellen Datenbank zurückgibt, kann diese Konvertierung das Verhalten Ihres Codes beeinflussen.

Codebeispiel

Eingabecode:
 SELECT DB_NAME(someId);
Copy
Generierter Code:
 SELECT
CURRENT_DATABASE() /*** SSC-FDM-TS0010 - CURRENT_DATABASE function has different behavior in certain cases ***/;
Copy

Best Practices

SSC-FDM-TS0011

Bemerkung

Diese FDM wird nicht mehr unterstützt. Weitere Informationen finden Sie unter SSC-EWI-TS0078.

Beschreibung

Dieser Fehler tritt auf, wenn Ausdrücke wie Funktionsaufrufe, Variablennamen oder benannte Konstanten nach dem Standardfall in einer SWITCH-Anweisung platziert werden.

Snowflake akzeptiert nur explizite konstante Werte, wie Zahlen oder Zeichenfolgen, als direkte Eingaben.

Codebeispiel

Eingabecode:
 ALTER TABLE
    T_ALTERTABLETEST
ADD
    COLUMN COL10 INTEGER DEFAULT RANDOM(10);
Copy
Generierter Code:
 --** 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
#### Best Practices

SSC-FDM-TS0012

Beschreibung

Diese Warnung erscheint in benutzerdefinierten Tabellenwertfunktionen, wenn das System bei der Konvertierung den Rückgabetyp einer Spalte nicht bestimmen kann. In diesen Fällen wird STRING automatisch als Standardtyp verwendet, um der CAST-Operation in der SELECT-Anweisung zu entsprechen.

Codebeispiel

Eingabecode:
 CREATE FUNCTION GetDepartmentInfo()
RETURNS TABLE
AS
RETURN
(
  SELECT DepartmentID, Name, GroupName
  FROM HumanResources.Department
);
Copy
Generierter Code:
 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

Best Practices

  • Prüfen Sie den Datentyp, der nicht gefunden werden konnte, und aktualisieren Sie ihn in der RETURNS TABLE-Anweisung.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com

SSC-FDM-TS0013

Beschreibung

Diese Warnung erscheint, wenn der Quellcode Cursor enthält, die geändert werden können. In Snowflake Scripting sind die Cursorzeilen schreibgeschützt und können nicht geändert werden.

Beispielcode:

Eingabecode:
 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
Generierter Code:
 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

Best Practices

SSC-FDM-TS0014

Beschreibung

Beim Konvertieren einer berechneten SQL Server-Spalte in Snowflake wird eine Warnung angezeigt. Diese Warnung weist darauf hin, dass die Funktionalität in Snowflake möglicherweise nicht genau dieselbe ist wie in SQL Server.

Codebeispiel

Eingabecode:
 CREATE TABLE [TestTable](
    [Col1] AS (CONVERT ([REAL], ExpressionValue))
);
Copy
Generierter Code:
 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

Best Practices

  • Diese Meldung ist nur zu Ihrer Information. Es besteht kein Handlungsbedarf.

  • Nehmen Sie manuelle Anpassungen an allen Ausdrücken vor, die nicht automatisch transformiert wurden.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-TS0015

Beschreibung

Diese Warnung erscheint, wenn der Datentyp einer SQL Server-Spalte in Snowflake nicht unterstützt wird.

Codebeispiel

Eingabecode:
 CREATE TABLE table1
(
column1 type1
);
Copy
Generierter Code:
 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

Best Practices

SSC-FDM-TS0016

Beschreibung

Diese Warnung erscheint bei der Konvertierung einer SQL Server -FOR XML-Klausel in Snowflake. Sie zeigt an, dass die Spaltenreihenfolge in der resultierenden XML-Ausgabe auf den beiden Plattformen unterschiedlich sein kann.

Codebeispiel

Geben Sie eine Beispieltabelle mit dem Namen employee wie unten gezeigt an.

ID

Name

Hinweis

1

Kinslee Park

Entwickler

2

Ezra Mata

Entwickler

3

Aliana Quinn

Manager

Eingabecode:
 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
Generierter Code:
 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

Best Practices

  • Dies ist eine Informationsmeldung. Es sind keine Maßnahmen erforderlich.

  • Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-TS0017

Beschreibung

Diese Warnung erscheint, wenn Funktionen wie SUSER_NAME oder SUSER_SNAME einen Parameter für einen Benutzerbezeichner enthalten, da die Funktion CURRENT_USER von Snowflake keine Benutzerparameter unterstützt.

Eingabecode:

 SELECT SUSER_NAME(0x010500000000000515000000a065cf7e784b9b5fe77c87705a2e0000);
Copy
Generierter Code:
 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

Best Practices

SSC-FDM-TS0018

Bemerkung

Diese FDM wird nicht mehr unterstützt. Weitere Informationen finden Sie unter SSC-EWI-TS0079.

Beschreibung

Dieses Featuremigrationsdetail (FMD) erscheint, wenn SnowConvert eine DBCC-Anweisung (Database Console Command) im Quellcode entdeckt. Bitte beachten Sie, dass Snowflake die meisten DBCC-Anweisungen nicht unterstützt.

Codebeispiel

Eingabecode:
 DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS
Copy
Generierter Code:
 ----** SSC-FDM-TS0018 - DATABASE CONSOLE COMMAND 'CHECKIDENT' IS NOT SUPPORTED. **
--DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS
Copy

Empfehlungen

  • Dies ist eine Informationsmeldung. Es sind keine Maßnahmen erforderlich.

  • Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com

SSC-FDM-TS0019

Schweregrad

Schlecht

Beschreibung

Diese Warnung weist darauf hin, dass die RAISERROR-Fehlermeldung aufgrund der Zeichenfolgen-Formatierungsregeln von SQL Server unterschiedlich ausfallen kann.

Codebeispiel

Eingabecode:
 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
Generierter Code:
 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

Empfehlungen

SSC-FDM-TS0020

Beschreibung

Dieser Featureerkennungsmarker (Feature Detection Marker, FDM) wird ausgelöst, wenn eine Standardeinschränkung in einer ALTER TABLE-Anweisung gefunden wird.

Derzeit wird dieser Typ von Einschränkung nicht unterstützt. Um diese Beschränkung zu umgehen, sollten Sie die Tabelle definieren, bevor Sie den ALTER TABLE-Befehl verwenden. Dieser Ansatz hilft SnowConvert dabei, die Referenzen zu identifizieren, und die Standardeinschränkung wird in die Tabellendefinition aufgenommen. Wenn Sie diesen Ansatz nicht verfolgen, wird die Einschränkung nur als Kommentar im Code erscheinen.

Codebeispiel

Eingabecode:
 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
Ausgabecode:
 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

Bekannte Probleme

  • Wenn mehrere Standardeinschränkungen für dieselbe Spalte definiert sind, wird in der CREATE TABLE-Anweisung nur die erste angezeigt.

  • Wenn eine Standardeinschränkung eine Spalte referenziert, die nicht existiert, schlägt die Transformation fehl, weil die erforderliche Spalte fehlt.

Empfehlungen

SSC-FDM-TS0021

Schweregrad

Schlecht

Bemerkung

Zur besseren Lesbarkeit haben wir einige Abschnitte des Codes in diesem Beispiel vereinfacht.

Beschreibung

Diese EWI-Meldung (Error, Warning, Information) erscheint, wenn eine ALTER TABLE-Anweisung eine MASKED WITH-Klausel enthält. Sie zeigt an, dass das System eine ungenaue MASKING POLICY erstellt hat, um die Funktion MASKED WITH zu ersetzen.

Codebeispiel

Eingabecode:
 ALTER TABLE table_name
ALTER COLUMN column_name
ADD MASKED WITH (FUNCTION = 'default()');
Copy
Ausgabecode:
 --** 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

Bemerkung

Die MASKING POLICY muss erstellt werden, bevor Sie die ALTER TABLE-Anweisung ausführen. Bitte beachten Sie, dass das Verhalten möglicherweise nicht genau dem des Ausgangssystems entspricht und Sie möglicherweise Rollen und Berechtigungen der Benutzer entsprechend anpassen müssen.

Empfehlungen

SSC-FDM-TS0022

Schweregrad

Schlecht

Bemerkung

Zur besseren Lesbarkeit haben wir einige Abschnitte des Codes in diesem Beispiel vereinfacht.

Beschreibung

Dieser Fehler tritt auf, wenn einer MASKING POLICY bestimmte Rollen oder Berechtigungen zugewiesen werden müssen, damit die Datenmaskierung korrekt funktioniert.

Codebeispiel

Eingabecode
 ALTER TABLE tableName
ALTER COLUMN columnName
ADD MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)');
Copy
Generierter Code:
 --** 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

Bemerkung

In Zeile 6 können Sie einen oder mehrere durch Kommas getrennte Rollenwerte hinzufügen. Jeder Rollenwert muss in einfache Anführungszeichen gesetzt werden.

Empfehlungen

SSC-FDM-TS0023

Schweregrad

Schlecht

Beschreibung

Diese Warnung erscheint während der Transformation der Funktion ERROR_MESSAGE(). Bitte beachten Sie, dass die genaue Fehlermeldung in Snowflake anders aussehen kann.

Eingabecode:
 SET @varErrorMessage = ERROR_MESSAGE()
Copy
Ausgabecode
 BEGIN
VARERRORMESSAGE := SQLERRM /*** SSC-FDM-TS0023 - ERROR MESSAGE COULD BE DIFFERENT IN SNOWFLAKE ***/;
END;
Copy

Empfehlung

Wenn Sie weitere Hilfe benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.

SSC-FDM-TS0024

Beschreibung

Dieser Funktionserkennungsmechanismus (Function Detection Mechanism, FDM) wird ausgelöst, wenn At Time Zone mit CURRENT_TIMESTAMP verwendet wird. Diese Überprüfung ist notwendig, da die Ergebnisse in bestimmten Szenarien variieren können.

Der wichtigste Unterschied zwischen SQL Server und der Funktion CURRENT_TIMESTAMP von Snowflake ist die Handhabung der Zeitzonen:

  • SQL Server: Gibt das Systemdatum und die Systemuhrzeit basierend auf der lokalen Zeitzone des Servers zurück

  • Snowflake: Gibt das Datum und die Uhrzeit als UTC-Zeit (Koordinierte Weltzeit) zurück

Eingabecode:

 SELECT current_timestamp at time zone 'Hawaiian Standard Time';
Copy

2024-02-08 16:52:55.317 -10:00

Ausgabecode:
 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

Empfehlungen

Hier ist ein Beispiel dafür, wie Sie in Snowflake eine einheitliche Formatierung beibehalten können.

 SELECT current_timestamp at time zone 'Hawaiian Standard Time';
Copy

2024-02-08 16:33:49.143 -10:00

In Snowflake können Sie die Standardzeitzone mit dem Befehl ALTER SESSION ändern. Beispiel:

 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

Beschreibung

Diese Funktionsdesignnotiz (Function Design Memo, FDM) erklärt, wie die Funktion DB_ID_UDF das Verhalten der SQL Server-Funktion DB_ID zu replizieren versucht. Während SQL Server den Datenbanken permanente, eindeutige Bezeichner zuweist, die nie wiederverwendet werden, geht Snowflake mit den Datenbank-IDs anders um. In Snowflake sind die Datenbank-IDs fortlaufende Nummern, die zum Zeitpunkt der Erstellung zugewiesen werden. Wenn eine Datenbank gelöscht wird, wird ihre ID-Nummer frei und wird der nächsten neu erstellten Datenbank zugewiesen.

Eingabecode:

 SELECT DB_ID('my_database');
Copy

6

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

6

Empfehlungen

SSC-FDM-TS0026

Beschreibung

Wenn Sie eine INSERT-Anweisung transformieren, die einen DML-Tabellenfaktor enthält, muss eine temporäre Tabelle erstellt werden. Beachten Sie, dass diese Featureerkennungsmeldung (Feature Detection Message, FDM) angibt, dass DELETE-Operationen in dieser Transformation nicht enthalten sind. Weitere Einzelheiten zu diesem Muster finden Sie unter INSERT with Table DML Factor with MERGE as DML.

Eingabecode:

 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
Ausgabecode:
 --** 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

Empfehlungen

SSC-FDM-TS0027

Beschreibung

Dieser Befund während der Migration (Finding During Migration, FDM) weist darauf hin, dass die SET ANSI_NULLS ON-Anweisung in Snowflake anders funktionieren könnte als in der Quelldatenbank. Ausführliche Informationen zu dieser Anweisung finden Sie in der Dokumentation zu ANSI_NULLS.

Eingabecode

 SET ANSI_NULLS ON;
Copy
Ausgabecode
 ----** SSC-FDM-TS0027 - SET ANSI_NULLS ON STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE **
--SET ANSI_NULLS ON
Copy

Empfehlungen

SSC-FDM-TS0028

Beschreibung

Diese Meldung weist darauf hin, dass bei der Verwendung von SP_EXECUTESQL die Ausgabeparameter in der gleichen Reihenfolge aufgeführt werden müssen, wie sie in der auszuführenden SQL-Zeichenfolge erscheinen. Wenn die Reihenfolge anders ist, werden die Ausgabewerte falsch zugeordnet.

Codebeispiel

Korrekter Fall

Die Reihenfolge der Parameter @MaxAgeOUT und @MaxIdOUT stimmt sowohl in der Abfragezeichenfolge SQL als auch in der Definition der Ausgabeparameter überein.

Bei der Konvertierung des Codes speichert die Anweisung SELECT $1, $2 INTO:MAXAGE, :MAXID FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) die Werte aus den Spalten $1 und $2 in der Variablen MAXAGE bzw. MAXID.

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

Allgemeine Probleme

Die Reihenfolge der Ausgabeparameter @MaxAgeOUT und @MaxIdOUT in der Definition der gespeicherten Prozedur unterscheidet sich von ihrer Reihenfolge in der SQL-Abfragezeichenfolge.

Dies hat zur Folge, dass bei der Codekonvertierung die Anweisung SELECT $1, $2 INTO :MAXID, :MAXAGE FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) Werte in einer unerwarteten Reihenfolge zuweist. Der Wert von Max(AGE) wird :MAXID zugewiesen, während Max(ID) zu :MAXAGE zugewiesen wird, was das Gegenteil von dem ist, was beabsichtigt ist.

Dieses Problem kann behoben werden, indem Sie entweder die Reihenfolge der Ausgabeparameter in der SELECT INTO-Anweisung anpassen oder die Reihenfolge in der SQL-Zeichenfolge entsprechend ändern.

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

Empfehlungen

  • Stellen Sie sicher, dass die OUTPUT-Parameter der Reihenfolge ihres Erscheinens in der SQL-Zeichenfolge entsprechen.

  • Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com