SnowConvert AI – Funktionsunterschiede zwischen SQL Server und Azure Synapse¶
Applies to
SQL Server
Azure Synapse Analytics
SSC-FDM-TS0001¶
Bemerkung
Diese FDM ist veraltet. Weitere Informationen finden Sie unter SSC-EWI-TS0077 documentation.
Beschreibung¶
Diese Meldung wird angezeigt, wenn es eine Sortierklausel gibt, die in Snowflake nicht unterstützt wird.
Codebeispiel¶
Eingabecode:¶
SELECT 'a' COLLATE Albanian_BIN;
SELECT 'a' COLLATE Albanian_CI_AI;
CREATE TABLE ExampleTable (
ID INT,
Name VARCHAR(50) COLLATE collateName
);
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"}}'
;
Best Practices¶
Es sind keine zusätzlichen Benutzeraktionen erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0002¶
Beschreibung¶
Diese Meldung wird angezeigt, wenn es eine Sortierklausel gibt, die in Snowflake nicht unterstützt wird.
Codebeispiel¶
Eingabecode:¶
SELECT 'a' COLLATE Latin1_General_CI_AS_WS;
Generierter Code:¶
SELECT 'a' COLLATE 'EN-CI-AS' /*** SSC-FDM-TS0002 - COLLATION FOR VALUE WS NOT SUPPORTED ***/;
Best Practices¶
Es sind keine zusätzlichen Benutzeraktionen erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0003¶
XP_LOGININFO zugeordnet zu benutzerdefiniertem UDF
Beschreibung¶
Diese Meldung wird angezeigt, wenn die XP_LOGININFO-Prozedur ausgeführt wird und den folgenden Satz von Spalten zurückgibt (siehe SQL SERVER-Dokumentation für weitere Informationen).
| account name | type | privilege | mapped login name | permission path |
Um dieses Verhalten zu replizieren, kann eine Abfrage verwendet werden, die die Spalten aus der APPLICABLE_ROLES-Ansicht in Snowflake auswählt und den folgenden Satz von Spalten zurückgibt (siehe SnowFlake-Dokumentation für weitere Informationen).
GRANTEE |
ROLE_NAME |
ROLE_OWNER |
IS_GRANTABLE |
|---|
Ursprüngliche SQL Server-Spalten werden wie in der nächsten Tabelle gezeigt zugeordnet. Möglicherweise sind sie nicht vollständig gleichwertig.
| SQL Server | SnowFlake | |
|---|---|---|
| account name | GRANTEE | |
| type | ROLE_OWNER | |
| privilege | ROLE_NAME | |
| mapped login name | GRANTEE | |
| permission path | NULL |
Beispielcode¶
Eingabecode:¶
EXEC xp_logininfo
EXEC xp_logininfo 'USERNAME'
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'));
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0004¶
Beschreibung¶
Diese Meldung wird angezeigt, wenn eine BULK INSERT-Anweisung umgewandelt wurde und ein PUT-Befehl zur Ausgabe hinzugefügt wurde. Dies geschieht, weil der PUT-Befehl nicht über die SnowSQL-Web-UI ausgeführt werden kann. Um ihn erfolgreich auszuführen, muss der Benutzer zuvor den SnowCLI installiert haben.
Codebeispiel¶
Eingabecode:¶
BULK INSERT #temptable FROM 'path/to/file.txt'
WITH
(
FIELDTERMINATOR ='\t',
ROWTERMINATOR ='\n'
);
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;
Best Practices¶
Installieren Sie SnowCLI.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0005¶
TRY_CONVERT/TRY_CAST konnte nicht konvertiert werden in TRY_CAST
Beschreibung¶
Diese FMD wird hinzugefügt, wenn TRY_CONVERT oder TRY_CAST in Snowflake nicht in TRY_CAST konvertiert werden können.
Die [TRY_CAST]-Funktion (https://docs.snowflake.com/en/sql-reference/functions/try_cast) von Snowflake hat eine Einschränkung, da sie nur die Konvertierung von Zeichenfolgenausdrücken erlaubt. Die TRY_CONVERT- und TRY_CAST-Funktionen hingegen unterstützen Ausdrücke beliebiger Datentypen.
Derzeit wird die Umwandlung von TRY_CONVERT oder TRY_CAST in die TRY_CAST-Funktion von Snowflake nur für Zeichenfolgenausdrücke oder für Ausdrücke durchgeführt, die das Tool im jeweiligen Kontext als Zeichenfolgen identifizieren kann.
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 )');
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 )');
Best Practices¶
Es sind keine zusätzlichen Benutzeraktionen erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0006¶
Die EXECUTE AS ‚user_name‘-Klausel existiert in Snowflake nicht, und der Benutzer, der die Prozedur aufruft, muss über alle erforderlichen Berechtigungen verfügen.
Beschreibung¶
Diese Nachricht wird angezeigt, wenn SnowConvert AI eine Prozedur mit einer EXECUTEAS „user_name“-Klausel findet. Dies wird in Snowflake nicht unterstützt, daher wird es in EXECUTE AS CALLER. geändert.
Diese Klausel gibt den Sicherheitskontext an, in dem die Prozedur ausgeführt werden soll.
Bemerkung
Weitere Informationen dazu finden Sie in der Dokumentation über die Funktion der Klausel.
Codebeispiel¶
Eingabecode:¶
CREATE PROCEDURE SelectAllCustomers
WITH EXECUTE AS 'user_name'
AS
BEGIN
SELECT * FROM Customers;
END;
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;
$$;
Best Practices¶
Es sind keine zusätzlichen Benutzeraktionen erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0007¶
FOR REPLICATION-Klausel existiert nicht in Snowflake.
Beschreibung¶
Diese Nachricht wird angezeigt, wenn SnowConvert AI eine Prozedur mit einer FORREPLICATION-Klausel findet. Dies wird in Snowflake nicht unterstützt, daher wird sie entfernt.
Diese Klausel gibt an, dass die Prozedur für die Replikation erstellt wird. Folglich kann es nicht auf dem Abonnent ausgeführt werden.
Bemerkung
Weitere Informationen dazu finden Sie in der Dokumentation zur Funktion der Klausel.
Codebeispiel¶
Eingabecode:¶
CREATE PROCEDURE SelectAllCustomers
WITH FOR REPLICATION
AS
BEGIN
SELECT * FROM Customers;
END;
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;
$$;
Best Practices¶
Es sind keine zusätzlichen Benutzeraktionen erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0008¶
FORMATMESSAGE-Funktion wurde konvertiert in UDF
Beschreibung¶
Diese Warnung wurde hinzugefügt, weil die Funktion FORMATMESSAGE verwendet wird und durch FORMATMESSAGE_UDF ersetzt wurde. Der Grund für das Hinzufügen dieser Warnung ist, dass die FORMATMESSAGE_UDF, die die ursprünglichen FORMATMESSAGE ersetzt, nicht alle Formatvarianten korrekt verarbeitet und unter bestimmten Bedingungen einen Fehler auslösen kann.
Numerische Werte ohne Vorzeichen, die als negativ angegeben werden, behalten das Vorzeichen bei, anstatt den Wert umzuwandeln. Außerdem wird der Platzhalter %I64d von UDF nicht unterstützt, sodass bei seiner Verwendung ein Fehler ausgelöst wird.
Bei Verwendung von FORMATMESSAGE_UDF tritt ein Fehler auf, wenn die angegebene Anzahl von Argumenten nicht mit der Anzahl der Platzhalter übereinstimmt.
Dieses UDF unterstützt nicht die Verwendung von Nachrichten-IDs.
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)
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)
Best Practices¶
Vermeiden Sie die Verwendung des Platzhalters
%I64din der Nachricht.Verwenden Sie die Nachricht direkt als Zeichenfolge, anstatt eine Nachrichten-ID für das erste Argument zu verwenden.
Stellen Sie sicher, dass die Anzahl der Platzhalter mit der Anzahl der Argumente nach der Meldung übereinstimmt.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0009¶
„Verschlüsselt mit“ wird in Snowflake nicht unterstützt.
Beschreibung¶
Diese Warnung wird hinzugefügt, wenn in einer Spaltendefinition ein ENCRYPTEDWITH-Attribut verwendet wird. Da dies in Snowflake nicht unterstützt wird, wird es entfernt und es wird eine Warnung hinzugefügt.
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'
)
);
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"}}'
;
Best Practices¶
Es sind keine zusätzlichen Benutzeraktionen erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0010¶
CURRENT_DATABASE-Funktion verhält sich in bestimmten Fällen unterschiedlich.
Beschreibung¶
Diese EWI wird hinzugefügt, wenn die Funktion DB_NAME in CURRENT_DATABASE umgewandelt wird, da Snowflake den Parameter database_id nicht unterstützt und die Funktion CURRENT_DATABASE immer den Namen der aktuellen Datenbank zurückgibt.
Codebeispiel¶
Eingabecode:¶
SELECT DB_NAME(someId);
Generierter Code:¶
SELECT
CURRENT_DATABASE() /*** SSC-FDM-TS0010 - CURRENT_DATABASE function has different behavior in certain cases ***/;
Best Practices¶
Es sind keine zusätzlichen Benutzeraktionen erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0011¶
Standardwert in Snowflake nicht zulässig.
Bemerkung
Diese FDM ist veraltet. Weitere Informationen finden Sie unter SSC-EWI-TS0078.
Beschreibung¶
Dieser Fehler wird dem Code hinzugefügt, wenn Ausdrücke wie Funktionsaufrufe, Variablennamen oder benannte Konstanten auf die Standardoption folgen.
Snowflake unterstützt nur explizite Konstanten wie Zahlen oder Zeichenfolgen.
Codebeispiel¶
Eingabecode:¶
ALTER TABLE
T_ALTERTABLETEST
ADD
COLUMN COL10 INTEGER DEFAULT RANDOM(10);
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)
;
¶
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0012¶
Informationen für die Spalte wurden nicht gefunden. STRING wird verwendet, um den CAST-Vorgang abzugleichen.
Beschreibung¶
Diese EWI wird in Table-Valued User-Defined Functions hinzugefügt, wenn der Rückgabetyp einer Spalte während der Konvertierung nicht bestimmt werden kann. STRING wird standardmäßig verwendet, um dem CAST-Vorgang in der SELECT-Anweisung zu entsprechen. <!–TODO: search for a broken reference.->
Codebeispiel¶
Eingabecode:¶
CREATE FUNCTION GetDepartmentInfo()
RETURNS TABLE
AS
RETURN
(
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
);
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
$$;
Best Practices¶
Der Benutzer sollte prüfen, welcher Datentyp nicht erkannt werden konnte, und ihn in der Statement-Definition
RETURNS TABLEentsprechend anpassen.Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0013¶
Snowflake Scripting-Cursorzeilen sind nicht veränderbar.
Beschreibung¶
Diese EWI wird hinzugefügt, wenn Cursor für Änderungen im Eingabecode offen sind. Snowflake Scripting erlaubt es nicht, Cursorzeilen zu ändern.
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;
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;
$$;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0014¶
Berechnete Spalte transformiert
Beschreibung¶
Diese Warnung wird hinzugefügt, wenn eine berechnete Spalte aus SQL Server in ihr Snowflake-Äquivalent umgewandelt wird. Sie wurde hinzugefügt, weil in einigen Fällen die funktionale Äquivalenz beeinträchtigt werden könnte.
Codebeispiel¶
Eingabecode:¶
CREATE TABLE [TestTable](
[Col1] AS (CONVERT ([REAL], ExpressionValue))
);
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"}}'
;
Best Practices¶
Es sind keine zusätzlichen Benutzeraktionen erforderlich. Dies ist nur informativ.
Fügen Sie manuelle Änderungen an dem nicht transformierten Ausdruck hinzu.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0016¶
XML-Spalten in Snowflake haben möglicherweise ein anderes Format
Beschreibung¶
Diese Warnung wird hinzugefügt, wenn eine SQL Server FOR XML-Klausel in ihr Snowflake-Äquivalent umgewandelt wird. Sie wird hinzugefügt, weil sich Spalten in XML unterscheiden können.
Codebeispiel¶
Angenommen, die folgende Tabelle hat den Namen: Mitarbeiter.
ID |
Name |
Hinweis |
|---|---|---|
1 |
Kinslee Park |
Entwickler |
2 |
Ezra Mata |
Entwickler |
3 |
Aliana Quinn |
Manager |
Eingabecode:¶
Code¶
SELECT
e.id,
e.name as full_name,
e.hint
FROM
employee e
FOR XML PATH;
Ausgabe¶
<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>
Generierter Code:¶
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;
Ausgabe¶
<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>
Best Practices¶
Es sind keine zusätzlichen Benutzeraktionen erforderlich. Dies ist nur informativ.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0017¶
CURRENT_USER-Funktion unterstützt keine Benutzer-ID als Parameter.
Beschreibung¶
Diese EWI wird hinzugefügt, wenn Funktionen wie SUSER_NAME oder SUSER_SNAME den Benutzerbezeichner als Parameter enthalten, da dieser in der CURRENT_USER-Funktion von Snowflake nicht unterstützt wird.
Eingabecode:¶
SELECT SUSER_NAME(0x010500000000000515000000a065cf7e784b9b5fe77c87705a2e0000);
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. ***/;
Best Practices¶
Es sind keine zusätzlichen Benutzeraktionen erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0018¶
Der Datenbank-Konsolenbefehl wird nicht unterstützt
Bemerkung
Diese FDM ist veraltet. Weitere Informationen finden Sie unter SSC-EWI-TS0079.
Beschreibung¶
Diese FMD wird hinzugefügt, wenn SnowConvert AI im Eingabecode eine DBCC-Anweisung findet. Die meisten DBCC-Anweisungen werden in Snowflake nicht unterstützt.
Codebeispiel¶
Eingabecode:¶
DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS
Generierter Code:¶
----** SSC-FDM-TS0018 - DATABASE CONSOLE COMMAND 'CHECKIDENT' IS NOT SUPPORTED. **
--DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS
Best Practices¶
Es sind keine zusätzlichen Benutzeraktionen erforderlich. Dies ist nur informativ.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0019¶
Die Fehlermeldung RAISERROR kann aufgrund des SQL-Zeichenfolgenformats abweichen.
Beschreibung¶
Diese EWI wird hinzugefügt, um darauf hinzuweisen, dass sich die Fehlermeldung RAISERROR aufgrund des SQL-Zeichenkettenformats unterscheiden 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
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;
$$;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0020¶
Die Standard-Einschränkung wurde auskommentarisiert und wurde möglicherweise zu einer Tabellendefinition hinzugefügt.
Beschreibung¶
Diese FDM wird hinzugefügt, wenn die Standardeinschränkung in einer Alter Table-Anweisung vorhanden ist.
Derzeit ist keine Unterstützung für diese Einschränkung verfügbar. Eine Problemumgehung für die Transformation besteht darin, die Tabelle vor der Verwendung von „Alter Table“ zu definieren. Dies erlaubt SnowConvert AI die Referenzen zu identifizieren. Die Standardeinschränkung wird in der Tabellendefinition konsolidiert. Andernfalls wird die Einschränkung nur auskommentiert.
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;
Generierter Code:¶
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
;
Bekannte Probleme¶
Wenn für dieselbe Spalte verschiedene Standardeinschränkungen deklariert sind, wird in der Anweisung „Create Tabel“ nur die erste berücksichtigt.
Wenn eine Standardeinschränkung für eine fehlende Spalte deklariert wird, kann die Transformation aufgrund fehlender Abhängigkeiten nicht ausgeführt werden.
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0021¶
Eine MASKING POLICY wurde als Ersatz für MASKED WITH erstellt.
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese EWI wird hinzugefügt, wenn die Alter Table-Anweisung eine MASKED WITH-Klausel enthält. Der Grund für diese Meldung ist, darauf hinzuweisen, dass eine approximative MASKING POLICY als Ersatz für die MASKED WITH-Funktion erstellt wurde.
Codebeispiel¶
Eingabecode:¶
ALTER TABLE table_name
ALTER COLUMN column_name
ADD MASKED WITH (FUNCTION = 'default()');
Generierter Code:¶
--** 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";
Bemerkung
Die MASKING POLICY wird vor der ALTER TABLE-Anweisung erstellt. Es wird erwartet, dass sie ein approximiertes Verhalten aufweist. Einige Anpassungen können in Bezug auf Rollen und Benutzerberechtigungen erforderlich sein.
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0022¶
Der Benutzer muss zuvor die Maskierungsrolle definieren.
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese EWI wird angezeigt, wenn eine MASKING POLICY erstellt wird und eine Rolle oder Berechtigung mit ihr verknüpft werden muss, damit die Datenmaskierung ordnungsgemäß funktioniert.
Codebeispiel¶
Eingabecode¶
ALTER TABLE tableName
ALTER COLUMN columnName
ADD MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)');
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";
Bemerkung
Wie in Zeile 6 gezeigt, gibt es einen Platzhalter, in dem die definierten Rollen platziert werden können. Es gibt Platz für einen oder mehrere durch Kommas getrennte Werte. Auch hier ist die Verwendung einzelner Abfragen für jeden der Werte obligatorisch.
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0023¶
Die Fehlerfunktion kann in Snowflake unterschiedlich sein
Beschreibung¶
Diese EWI wird bei der Transformation der folgenden ERRORs-Funktionen aufgrund der entsprechenden Verhaltensänderung hinzugefügt.
ERROR_MESSAGE Die Meldung von SQLERRM könnte in Snowflake anders sein.
ERROR_STATE Die Zieleigenschaft SQLSTATE kann aufgrund von Plattformunterschieden eine andere Zahl zurückgeben.
ERROR_PROCEDURE Die Transformation wurde geändert, um die gespeicherte Prozedur zurückzugeben, in der die Funktion aufgerufen wird.
Eingabecode:¶
CREATE PROCEDURE ProcError
AS
BEGIN
Declare @ErrorState INT = ERROR_STATE();
Declare @ErrorMessage INT = ERROR_MESSAGE();
Declare @ErrorProc INT = ERROR_PROCEDURE();
Select 1;
END;
Generierter Code¶
CREATE OR REPLACE PROCEDURE ProcError ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "09/01/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
ERRORSTATE INT := SQLSTATE /*** SSC-FDM-TS0023 - ERROR STATE COULD BE DIFFERENT IN SNOWFLAKE ***/;
ERRORMESSAGE INT := SQLERRM /*** SSC-FDM-TS0023 - ERROR MESSAGE COULD BE DIFFERENT IN SNOWFLAKE ***/;
ERRORPROC INT := 'ProcError' /*** SSC-FDM-TS0023 - ERROR PROCEDURE NAME COULD BE DIFFERENT IN SNOWFLAKE ***/;
ProcedureResultSet RESULTSET;
BEGIN
ProcedureResultSet := (
Select 1);
RETURN TABLE(ProcedureResultSet);
END;
$$;
Empfehlung¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0024¶
CURRENT_TIMESTAMP in At Time Zone-Anweisung kann in bestimmten Fällen ein anderes Verhalten aufweisen.
Beschreibung¶
Diese FDM wird hinzugefügt, wenn die Anweisung At Time Zone den Parameter CURRENT_TIMESTAMP verwendet. Dies liegt daran, dass das Ergebnis in einigen Fällen abweichen kann.
Der Hauptunterschied besteht darin, dass in SQL ServerCURRENT_TIMESTAMP das aktuelle Systemdatum und die Uhrzeit in der Zeitzone des Servers zurückgibt, während in Snowflake CURRENT_TIMESTAMP das aktuelle Datum und die Uhrzeit in der UTC-(Coordinated Universal Time)-Zeitzone liefert.
Eingabecode:¶
Sql Server¶
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
Ergebnis¶
2024-02-08 16:52:55.317 -10:00
Generierter Code:¶
Snowflake¶
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 ***/);
Ergebnis¶
2024-02-08 06:53:46.994 -1000
Best Practices¶
Dies ist ein Beispiel, wenn Sie das gleiche Format in Snowflake beibehalten möchten.
SQL Server¶
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
Ergebnis¶
2024-02-08 16:33:49.143 -10:00
In Snowflake können Sie ALTER SESSION verwenden, um die Standardzeitzone zu ändern. Beispiel:
Snowflake¶
ALTER SESSION SET TIMEZONE = 'Pacific/Honolulu';
SELECT
CONVERT_TIMEZONE('Pacific/Honolulu', 'UTC', CURRENT_TIMESTAMP());
Ergebnis¶
2024-02-08 16:33:49.143
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0025¶
DB_ID_UDF kann in bestimmten Fällen ein anderes Verhalten aufweisen.
Beschreibung¶
Diese FDM wird hinzugefügt, um zu verdeutlichen, dass die DB_ID_UDF- versucht, die DB_ID- SqlServer-Funktion so gut wie möglich nachzuahmen. In SqlServer ist der einer Datenbank zugewiesene Bezeichner eindeutig, und wenn die Datenbank gelöscht wird, wird diese ID nie wieder verwendet. In Snowflake hingegen entspricht dieser Bezeichner der Nummer, die der Datenbank bei ihrer Erstellung zugewiesen wird. Er ist ebenfalls eindeutig, jedoch fortlaufend – das bedeutet, wenn eine Datenbank gelöscht wird, kann diese Nummer der nächsten neu erstellten Datenbank zugewiesen werden.
Eingabecode:¶
Sql Server¶
SELECT DB_ID('my_database');
Ergebnis¶
6
Generierter Code:¶
Snowflake¶
SELECT
DB_ID_UDF('my_database') /*** SSC-FDM-TS0025 - DB_ID_UDF MAY HAVE A DIFFERENT BEHAVIOR IN CERTAIN CASES ***/;
Ergebnis¶
6
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0026¶
DELETE-Fall wird in der temporären Tabelle nicht berücksichtigt
Beschreibung¶
Es gibt ein INSERT-Anweisungsmuster, das eine bestimmte Transformation erfordert, die das Erstellen einer temporären Tabelle beinhaltet. Diese FDM benachrichtigt, dass der DELETE-Fall bei der genannten Transformation nicht berücksichtigt wird. Weitere Informationen zu diesem Muster finden Sie unter [INSERT mit Table DML-Faktor mit MERGE alsDML] (../../../../translation-references/transact/transact-dmls.md#insert).
Eingabecode:¶
Sql Server¶
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';
Generierter Code:¶
Snowflake¶
--** 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';
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0027¶
SET ANSI_NULLS ON-Anweisung kann in Snowflake ein anderes Verhalten aufweisen
Beschreibung¶
Diese FDM gibt an, dass die SET ANSI_NULLS ON-Anweisung sich in Snowflake möglicherweise anders verhält. Weitere Informationen zu dieser Anweisung finden Sie im Artikel ANSI_NULLS.
Eingabecode¶
SET ANSI_NULLS ON;
Generierter Code¶
----** SSC-FDM-TS0027 - SET ANSI_NULLS ON STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE **
--SET ANSI_NULLS ON
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0028¶
Die Ausgabeparameter müssen die gleiche Reihenfolge wie im ausgeführten Code haben.
Beschreibung¶
Diese FDM gibt an, dass die Ausgabeparameter in der SP_EXECUTESQL-Anweisung die gleiche Reihenfolge haben müssen wie in der auszuführenden SQL-Zeichenfolge. Andernfalls werden die Ausgabewerte nicht korrekt zugewiesen.
Codebeispiel¶
Korrekter Fall¶
Wie zu sehen ist, erscheinen@MaxAgeOUT und @MaxIdOUT in derselben Reihenfolge sowohl in der SQL-Zeichenfolge als auch in den Ausgabeparametern.
Bei der Konvertierung des Codes, weisen SELECT $1, $2 INTO :MAXAGE, :MAXID FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) die Werte korrekt zu.
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;
$$;
Problemfall¶
Wie zu sehen ist, erscheinen @MaxAgeOUT und @MaxIdOUT in den Ausgabeparametern in einer anderen Reihenfolge als in der SQL-Zeichenfolge.
Bei der Konvertierung des Codes weisen SELECT $1, $2 INTO :MAXID, :MAXAGE FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) die Werte falsch zu. Max(AGE) wird :MAXID zugewiesen und Max(ID) wird :MAXAGE zugewiesen.
Dies muss manuell behoben werden, entweder durch Ändern der Reihenfolge der Ausgabeparameter in der SELECT INTO-Anweisung oder durch Anpassen der Reihenfolge in der SQL-Zeichenfolge.
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;
$$;
Best Practices¶
Stellen Sie sicher, dass die OUTPUT-Parameter in der gleichen Reihenfolge sind, wie sie in der SQL-Zeichenfolge erscheinen.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0029¶
SET NOCOUNT-Anweisung wird auskommentiert. Dies gilt nicht für Snowflake.
Beschreibung¶
Wenn SnowConvert AI auf eine SET NOCOUNT-Anweisung stößt, fügt es diese FDM hinzu. SnowConvert AI kommentiert anschließend die SET NOCOUNT-Anweisung aus, da sie in der Snowflake-Umgebung nicht relevant ist.
Codebeispiel¶
Eingabecode:¶
SET NOCOUNT ON;
Generierter Code¶
----** SSC-FDM-TS0029 - SET NOCOUNT STATEMENT IS COMMENTED OUT, WHICH IS NOT APPLICABLE IN SNOWFLAKE. **
--SET NOCOUNT ON
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0030¶
SET ANSI_PADDING ON-Anweisung wird auskommentiert. Das Gleiche gilt auch für Snowflake.
Beschreibung¶
Snowflake behält in Zeichenfolgenwerten immer nachstehende Leerzeichen bei, wenn diese in -Spalten eingefügt werden. Dieses Verhalten entspricht SET ANSI_PADDING ON im SQL-Server. Daher fügt SnowConvert AI beim Auftreten einer SET ANSI_PADDING ON-Anweisung diese FDM hinzu und kommentiert sie aus.
Codebeispiel¶
Eingabecode:¶
SET ANSI_PADDING ON;
Generierter Code¶
----** SSC-FDM-TS0030 - SET ANSI_PADDING ON STATEMENT IS COMMENTED OUT, WHICH IS EQUIVALENT IN SNOWFLAKE. **
--SET ANSI_PADDING ON
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0031¶
SET ANSI_WARNINGS ON-Anweisung wird auskommentiert, womit sich Snowflake im Allgemeinen an ANSI-Standardverhaltensweisen hält.
Beschreibung¶
Snowflake verhält sich im Allgemeinen so, als wäre ANSI_WARNINGS standardmäßig ON, insbesondere in Bezug auf die Fehlerbehandlung bei arithmetischem Überlauf, Division durch null und Zeichenkürzung. In der Regel müssen Sie kein explizites Äquivalent zu ANSI_WARNINGS in Snowflake „festlegen“. Daher fügt SnowConvert AI beim Auftreten einer SET ANSI_WARNINGS ON-Anweisung diese FDM hinzu und kommentiert sie aus.
Codebeispiel¶
Eingabecode:¶
SET ANSI_WARNINGS ON;
Generierter Code¶
----** SSC-FDM-TS0031 - SET ANSI_WARNINGS ON STATEMENT IS COMMENTED OUT, WHICH SNOWFLAKE GENERALLY ADHERES TO ANSI-STANDARD BEHAVIORS. **
--SET ANSI_WARNINGS ON
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0032¶
IDENTITY-Spalteneigenschaft wird in CREATE TABLE AS STATEMENT nicht unterstützt. Sie wird mit Hilfe von ROW_NUMBER() emuliert.
Beschreibung¶
Snowflake bietet keine direkte Möglichkeit, um CREATE TABLE AS mit einer Identitätsspalte auszuführen. SnowConvert fügt hingegen eine ROW_NUMBER-Spalte anstelle von IDENTITY hinzu, um die Enumeration der Identität zu simulieren. Bei dieser Transformation wird keine Identitätsspalte erstellt, was bedeutet, dass Zeilen, die nach der Erstellung eingefügt wurden, nicht automatisch hochgezählt werden.
Codebeispiel¶
Eingabecode:¶
with peers as
(
select
*
from (
values
('Luis', 'Miguel'),
('Cory', 'Wong'),
('Steve', 'Vai'),
('John', 'Petrucci'),
('Paul', 'Gilbert')
) as info(name, lastname)
)
select
rowm = IDENTITY(int,1,1),
*
into #MYTABLE
from peers;
Generierter Code¶
--** SSC-FDM-TS0032 - IDENTITY COLUMN PROPERTY NOT SUPPORTED IN CREATE TABLE AS STATEMENT, EMULATED WITH USING ROW_NUMBER **
CREATE OR REPLACE TEMPORARY TABLE T_MYTABLE AS
WITH peers as
(
select
*
from (
values
('Luis', 'Miguel'),
('Cory', 'Wong'),
('Steve', 'Vai'),
('John', 'Petrucci'),
('Paul', 'Gilbert')
) as info (
name,
lastname
)
)
SELECT
ROW_NUMBER()
OVER (
ORDER BY
NULL) AS rowm,
*
from
peers;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0033¶
SET QUOTED_IDENTIFIER STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE.
Beschreibung¶
SQL Server Behavior
In SQL Server, SET QUOTED_IDENTIFIER ON is a syntax setting that is separate from collation. The database’s or column’s collation (e.g., _CI for Case-Insensitive or _CS for Case-Sensitive) dictates whether quoted identifiers are case-sensitive or not. If a database has a _CI collation, then „MyColumn“ and „mycolumn“ are treated as the same.
Snowflake Behavior
In Snowflake, the behavior is simpler and more strict:
Unquoted Identifiers: Automatically stored and resolved in all uppercase, making them case-insensitive (mytable is the same as MYTABLE).
Quoted Identifiers: By default, identifiers enclosed in double quotes („MyColumn“) are case-sensitive. They are stored exactly as you typed them.
Codebeispiel¶
Eingabecode:¶
SET QUOTED_IDENTIFIER ON
GO
-- the table is defined as "Products Test"
-- this query will work because the case is ignored.
select
*
from [products test];
SET QUOTED_IDENTIFIER OFF
-- this query will fail because the case is preserved
select
*
from [products test];
GO
Generierter Code¶
----** SSC-FDM-TS0033 - SET QUOTED_IDENTIFIER STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE **
--SET QUOTED_IDENTIFIER ON
-- the table is defined as "Products Test"
-- this query will work because the case is ignored.
select
*
from
"products test";
----** SSC-FDM-TS0033 - SET QUOTED_IDENTIFIER STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE **
--SET QUOTED_IDENTIFIER OFF
-- this query will fail because the case is preserved
select
*
from
"products test";
How to Achieve Equivalence in Snowflake
To get the same case-insensitive behavior for quoted identifiers as in SQL Server, you can set the QUOTED_IDENTIFIERS_IGNORE_CASE session parameter to TRUE in Snowflake.
-- This will make quoted identifiers case-insensitive for the session
ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = TRUE;
-- Now, this query will succeed
select
*
from
"products test";
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-FDM-TS0034¶
Beschreibung¶
This FDM is generated when a DATA_COMPRESSION clause is encountered in a CREATE TABLE or ALTER TABLE statement. In SQL Server, DATA_COMPRESSION is used to specify whether data should be compressed (using ROW or PAGE compression) to reduce storage space and improve I/O performance. Snowflake automatically handles data compression using its proprietary compression algorithms, making the DATA_COMPRESSION clause unnecessary and unsupported. SnowConvert comments out the DATA_COMPRESSION clause during conversion.
Example Code¶
Input (SQL Server):¶
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
Name NVARCHAR(100),
Department NVARCHAR(50),
Salary DECIMAL(10, 2)
)
WITH (DATA_COMPRESSION = PAGE);
Output (Snowflake):¶
CREATE OR REPLACE TABLE Employees (
EmployeeID INT PRIMARY KEY,
Name NVARCHAR(100),
Department NVARCHAR(50),
Salary DECIMAL(10, 2)
)
WITH (
-- --** SSC-FDM-TS0034 - DATA_COMPRESSION IS AUTOMATICALLY HANDLED BY SNOWFLAKE. **
-- DATA_COMPRESSION = PAGE
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "11/06/2025", "domain": "no-domain-provided", "migrationid": "sFmaAZAnCnm6VvGeJrE4BQ==" }}'
;
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.