SnowConvert AI – Probleme bei SQL Server Azure Synapse¶
Applies to
SQL Server
Azure Synapse Analytics
Sybase
SSC-EWI-TS0001¶
Benutzerdefinierter Funktionstext nicht generiert
Schweregrad¶
Kritisch
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese EWI wird angezeigt, wenn SnowConvert AI eine kritische Ausnahme behandelt, die dazu führt, dass der Funktionstext während der Übersetzung nicht generiert wird.
Beispielcode¶
SQL Server¶
CREATE FUNCTION func1 ()
RETURNS VARCHAR
SELECT
*
FROM
TABLE1
Snowflake¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "TABLE1" **
CREATE OR REPLACE FUNCTION func1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0001 - THE BODY WAS NOT GENERATED FOR FUNCTION 'func1' ***/!!!
AS
$$
$$;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0002¶
ANSI_PADDING OFF wird von Snowflake nicht unterstützt.
Schweregrad¶
Niedrig
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
In Transact-SQL entfernt die Anweisung SET ANSI_PADDING OFF die nachstehenden Leerzeichen beim Einfügen von char-Datentypen. Da SET ANSI_PADDING OFF keine direkt konfigurierbare Einstellung in Snowflake ist, generiert SnowConvert AI diese EWI.
Beispielcode¶
SQL Server¶
SET ANSI_PADDING OFF;
Snowflake¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0002 - THE ANSI_PADDING OFF IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
SET ANSI_PADDING OFF;
Best Practices¶
Fügen Sie
RTRIMzu allenCHAR()-Datentyp-Einfügungen hinzu, um dieses Problem zu beheben, einschließlich ETL-Code.Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0003¶
ANSI_WARNINGS OFF wird von Snowflake nicht unterstützt.
Schweregrad¶
Niedrig
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
In Transact-SQL deaktiviert die Anweisung SET ANSI_WARNINGS OFF Warnungen wie Division durch Null oder arithmetischen Überlauf. Da SET ANSI_WARNINGS OFF keine direkt konfigurierbare Einstellung in Snowflake ist, generiert SnowConvert AI diese EWI.
Beispielcode¶
SQL Server¶
SET ANSI_WARNINGS OFF;
Snowflake¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0003 - THE ANSI_WARNINGS OFF IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
SET ANSI_WARNINGS OFF;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0009¶
Die folgende Transaktion kann verschachtelte Transaktionen enthalten, was als komplexes Muster betrachtet wird, das von Snowflake nicht unterstützt wird.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Schweregrad¶
Hoch
Beschreibung¶
Dieser Fehler wird hinzugefügt, um anzuzeigen, dass eine Transaktion verschachtelte Transaktionen enthalten kann. In SQL Server können Transaktionen geschachtelt werden. Das bedeutet, dass es möglich ist, innerhalb einer bereits bestehenden Transaktion eine neue Transaktion zu starten. Wenn nach der ersten BEGIN-Anweisung eine weitere ausgeführt wird, wird eine neue Transaktion geöffnet und der aktuelle Transaktionszähler um eins erhöht.
Im Gegensatz dazu wird dies in Snowflake nicht unterstützt. Die zweite BEGIN-Anweisung wird ignoriert, und es bleibt weiterhin bei einer einzigen Transaktion. Weitere Informationen dazu finden Sie unter SQL Server Transactions.
Codebeispiel¶
Eingabecode:¶
CREATE PROC transactionsTest
AS
BEGIN TRANSACTION
SELECT @@TRANCOUNT AS TransactionCount_AfterFirstTransaction
INSERT INTO TESTSCHEMA.TESTTABLE(ID) VALUES (1), (2)
BEGIN TRANSACTION
SELECT @@TRANCOUNT AS TransactionCount_AfterSecondTransaction
INSERT INTO TESTSCHEMA.TESTTABLE(ID) VALUES (3), (4)
COMMIT;
SELECT @@TRANCOUNT AS TransactionCount_AfterFirstCommit
COMMIT;
END;
Generierter Code:¶
CREATE OR REPLACE PROCEDURE transactionsTest ()
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
ProcedureResultSet1 VARCHAR;
ProcedureResultSet2 VARCHAR;
ProcedureResultSet3 VARCHAR;
return_arr ARRAY := array_construct();
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0009 - THE FOLLOWING TRANSACTION MAY CONTAIN NESTED TRANSACTIONS WHICH ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!!
BEGIN TRANSACTION;
ProcedureResultSet1 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet1) AS
SELECT
:TRANCOUNT AS TransactionCount_AfterFirstTransaction;
return_arr := array_append(return_arr, :ProcedureResultSet1);
INSERT INTO TESTSCHEMA.TESTTABLE (ID) VALUES (1), (2);
BEGIN TRANSACTION;
ProcedureResultSet2 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet2) AS
SELECT
:TRANCOUNT AS TransactionCount_AfterSecondTransaction;
return_arr := array_append(return_arr, :ProcedureResultSet2);
INSERT INTO TESTSCHEMA.TESTTABLE (ID) VALUES (3), (4);
COMMIT;
ProcedureResultSet3 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet3) AS
SELECT
:TRANCOUNT AS TransactionCount_AfterFirstCommit;
return_arr := array_append(return_arr, :ProcedureResultSet3);
COMMIT;
--** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
RETURN return_arr;
END;
$$;
-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '12' COLUMN '1' OF THE SOURCE CODE STARTING AT 'END'. EXPECTED 'BATCH' GRAMMAR. **
--END
;
Best Practices¶
In Snowflake verursachen verschachtelte Transaktionen keine Kompilierungsfehler, sie werden einfach ignoriert. Sie können auf die Bewertungsberichte zugreifen, um zu prüfen, ob verschachtelte Transaktionen vorhanden sind.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0010¶
Common Table Expressions in Views werden in Snowflake nicht unterstützt.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Schweregrad¶
Hoch
Beschreibung¶
Dieser Fehler wird hinzugefügt, wenn ein ungültiges CTE in einer View enthalten ist. Views sind materialisierte Darstellungen von Abfragen, das heißt, sie definieren lediglich, wie Daten abgerufen und dargestellt werden, nicht jedoch, wie sie manipuliert werden.
Codebeispiel¶
Eingabecode:¶
Create View viewName
as
with commonTableExpressionName (
columnName
) as
(
select
1
)
((select
1 as col2)
union
(
select
1 as col3
));
Generierter Code:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0010 - COMMON TABLE EXPRESSION IN VIEW NOT SUPPORTED IN SNOWFLAKE. ***/!!!
CREATE OR REPLACE VIEW viewName
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
AS
!!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH CTE NOT SUPPORTED IN SNOWFLAKE ***/!!!
with commonTableExpressionName (
columnName
) as
(
select
1
)
((select
1 as col2)
union
(
select
1 as col3
));
Zugehörige EWI¶
SSC-EWI-0021: Nicht unterstützt.
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0013¶
Berechnete Spalte transformiert
Bemerkung
Diese EWI ist veraltet. Weitere Informationen finden Sie unter SSC-FDM-TS0013
Schweregrad¶
Niedrig
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-EWI-TS0015¶
Der Datentyp wird in Snowflake nicht unterstützt.
Schweregrad¶
Medium
Beschreibung¶
Diese Warnung wird hinzugefügt, wenn eine SQL Server-Spalte einen nicht unterstützten Typ in Snowflake hat.
Codebeispiel¶
Eingabecode:¶
CREATE TABLE table1
(
column1 customType,
);
Generierter Code:¶
CREATE OR REPLACE TABLE table1
(
column1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-TS0015 - DATA TYPE CUSTOMTYPE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
Best Practices¶
Prüfen Sie die Snowflake-Datentypen Dokumentation, um eine Entsprechung für den Datentyp zu finden.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0016¶
Übersetzung für ODBC Scalar-Funktion ausstehend
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese EWI wird hinzugefügt, wenn SnowConvert AI eine ODBC-Scalar-Funktion im Eingangscode findet. Benutzerdefinierte Funktionen werden in ODBC-Scalar-Funktionen nicht unterstützt.
Codebeispiel¶
Eingabecode:¶
SELECT {fn CURRENT_DATE_UDF()};
Generierter Code:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "CURRENT_DATE_UDF" **
SELECT
CURRENT_DATE_UDF() !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'CURRENT_DATE_UDF' NODE ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-TS0016 - USER DEFINED FUNCTIONS ARE NOT SUPPORTED IN ODBC SCALAR FUNCTION. ***/!!!;
Zugehörige EWI¶
SSC-EWI-0073: Überprüfung der gleichwertigen Funktion ausstehend.
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-EWI-TS0017¶
Maskierung nicht unterstützt
Schweregrad¶
Niedrig
Beschreibung¶
Diese EWI wird hinzugefügt, wenn SnowConvert AI eine maskierte Spalte innerhalb einer CREATE TABLE-Anweisung findet. Diese Funktion funktioniert nicht, wenn die Option in die Spaltendeklaration eingefügt wird. Manueller Aufwand ist erforderlich, um das gleiche Verhalten wie in SQL Server zu erzielen.
Codebeispiel¶
Eingabecode:¶
CREATE TABLE TABLE1
(
[COL1] nvarchar MASKED WITH (FUNCTION = 'default()') NULL,
[COL2] varchar(100) MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)') NULL,
[COL3] varchar(100) MASKED WITH (FUNCTION = 'email()') NOT NULL,
[COL4] smallint MASKED WITH (FUNCTION = 'random(1, 100)') NULL
);
Generierter Code:¶
CREATE OR REPLACE TABLE TABLE1
(
COL1 VARCHAR
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0017 - COLUMN MASKING NOT SUPPORTED IN CREATE TABLE ***/!!!
MASKED WITH (FUNCTION = 'default()') NULL,
COL2 VARCHAR(100)
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0017 - COLUMN MASKING NOT SUPPORTED IN CREATE TABLE ***/!!!
MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)') NULL,
COL3 VARCHAR(100)
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0017 - COLUMN MASKING NOT SUPPORTED IN CREATE TABLE ***/!!!
MASKED WITH (FUNCTION = 'email()') NOT NULL,
COL4 SMALLINT
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0017 - COLUMN MASKING NOT SUPPORTED IN CREATE TABLE ***/!!!
MASKED WITH (FUNCTION = 'random(1, 100)') NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
Best Practices¶
SnowConvert AI generiert in der aktuellen Version keine MASKING POLICIES, sodass sie manuell erstellt werden müssen. Beispiel:
Der erste Schritt besteht darin, eine Administratorrolle für Maskierungsrichtlinien zu erstellen.
create role masking_admin;
Die zweite Aufgabe besteht darin, der erstellten Rolle die erforderlichen Berechtigungen zu erteilen.
grant create masking policy on schema PUBLIC to role masking_admin;
allow table_owner role to set or unset the ssn_mask masking policy -- (optional)
grant apply on masking policy ssn_mask to role table_owner;
Der nächste Schritt besteht darin, die Maskierungsrichtlinienfunktionen zu erstellen.
-- default mask
create or replace masking policy default_mask as (val string) returns string ->
case
when current_role() in ('ANALYST') then val
else 'xxxx'
end;
-- partial mask
create or replace masking policy partial_mask as (val string) returns string ->
case
when current_role() in ('ANALYST') then val
else LEFT(val,1) || 'xxxxx' || RIGHT(val,1)
end;
-- email mask
create or replace masking policy email_mask as (val string) returns string ->
case
when current_role() in ('ANALYST') then val
else LEFT(val,1) || 'XXX@XXX.com'
end;
-- random mask
create or replace masking policy random_mask as (val smallint) returns smallint ->
case
when current_role() in ('ANALYST') then val
else UNIFORM(1,100,RANDOM())::SMALLINT
end;
Bemerkung
Zu Demonstrationszwecken nehmen wir einige Beispiele für Maskierungsfunktionen in SQL Server und übersetzen sie manuell in das entsprechende Äquivalent in Snowflake.
Der letzte Schritt besteht darin, die Maskierungsrichtlinie zu der Spalte hinzuzufügen, die ursprünglich die Maskierungsoption in SQL Server hatte.
alter table if exists TABLE1 modify column COL1 set masking policy default_mask;
alter table if exists TABLE1 modify column COL2 set masking policy partial_mask;
alter table if exists TABLE1 modify column COL3 set masking policy email_mask;
alter table if exists TABLE1 modify column COL4 set masking policy random_mask;
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0023¶
Massenoption wird nicht unterstützt
Schweregrad¶
Niedrig
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese EWI wird hinzugefügt, wenn eine Option in BULK INSERT nicht zugeordnet werden konnte. Die übersetzten Massenoptionen sollten als FILE FORMAT-Optionen dargestellt werden.
Codebeispiel¶
Eingabecode:¶
BULK INSERT #PCE FROM 'E:\PCE_Look-up_table.txt'
WITH
(
FIELDTERMINATOR ='\t',
ROWTERMINATOR ='\n',
FIRE_TRIGGERS
);
Generierter Code:¶
CREATE OR REPLACE FILE FORMAT FILE_FORMAT_638461199649565070
FIELD_DELIMITER = '\t'
RECORD_DELIMITER = '\n'
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0023 - 'FIRE_TRIGGERS' BULK OPTION COULD NOT BE TRANSFORMED TO ANY OF THE EXISTING FILE FORMAT OPTIONS ***/!!!
FIRE_TRIGGERS;
CREATE OR REPLACE STAGE STAGE_638461199649565070
FILE_FORMAT = FILE_FORMAT_638461199649565070;
--** SSC-FDM-TS0004 - PUT STATEMENT IS NOT SUPPORTED ON WEB UI. YOU SHOULD EXECUTE THE CODE THROUGH THE SNOWFLAKE CLI **
PUT file://E:\PCE_Look-up_table.txt @STAGE_638461199649565070 AUTO_COMPRESS = FALSE;
COPY INTO T_PCE FROM @STAGE_638461199649565070/PCE_Look-up_table.txt;
Best Practices¶
Besuchen Sie die SnowSQL CLI Benutzerhandbuch.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
Zugehörige EWI¶
SSC-FDM-TS0004: PUT-Anweisung in UI nicht unterstützt.
SSC-EWI-TS0024¶
Unvollständige Transformation für Masseneinfügen
Schweregrad¶
Niedrig
Beschreibung¶
Diese EWI wird hinzugefügt, wenn ein BULK INSERT innerhalb einer gespeicherten Prozedur überhaupt nicht erkannt wurde. Dadurch können die Abhängigkeiten für die vollständige Transformation nicht erzeugt werden. Das transformierte COPY INTO ruft die Datei aus einer tempStage ab, die manuell erstellt werden muss.
Codebeispiel¶
Eingabecode:¶
CREATE PROCEDURE BULK_PROC2
AS
BULK INSERT dbo.table1 FROM 'E:\test.txt'
WITH
(
FIELDTERMINATOR ='\t',
ROWTERMINATOR ='\n'
);
GO
Generierter Code:¶
CREATE OR REPLACE FILE FORMAT FILE_FORMAT_638461207064166040
FIELD_DELIMITER = '\t'
RECORD_DELIMITER = '\n';
CREATE OR REPLACE STAGE STAGE_638461207064166040
FILE_FORMAT = FILE_FORMAT_638461207064166040;
--** SSC-FDM-TS0004 - PUT STATEMENT IS NOT SUPPORTED ON WEB UI. YOU SHOULD EXECUTE THE CODE THROUGH THE SNOWFLAKE CLI **
PUT file://E:\test.txt @STAGE_638461207064166040 AUTO_COMPRESS = FALSE;
CREATE OR REPLACE PROCEDURE BULK_PROC2 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
// REGION SnowConvert AI Helpers Code
// END REGION
EXEC(`COPY INTO dbo.table1 FROM @STAGE_638461207064166040/test.txt`);
$$
Best Practices¶
Erstellen Sie eine STAGE and a FILE FORMAT manuell, um die Datei abzurufen.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0025¶
ERROR_SEVERITY-Funktion transformiert
Schweregrad¶
Niedrig
Bemerkung
Generieren Sie Prozeduren und Makros mit JavasScript als Zielsprache, indem Sie die folgende Option hinzufügen: -t JavaScript or –PLTargetLanguage JavaScript.
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese EWI wird hinzugefügt, wenn die integrierte Funktion ERROR_SEVERITY übersetzt wird. Standardmäßig gibt die Funktion 16 zurück, da dies der häufigste Schweregrad in SQL Server ist. Die generierte UDF sollte es erneut versuchen
Codebeispiel¶
Eingabecode:¶
-- Additional Params: -t JavaScript
CREATE procedure proc1()
as
BEGIN TRY
-- Generate a divide-by-zero error.
SELECT 1/0 from table1;
END TRY
BEGIN CATCH
return ERROR_SEVERITY();
END CATCH;
GO
Generierter Code:¶
CREATE OR REPLACE PROCEDURE proc1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
// SnowConvert AI Helpers Code section is omitted.
try {
EXEC(` -- Generate a divide-by-zero error.
SELECT
TRUNC( 1/0) from
table1`);
} catch(error) {
return SELECT(` !!!RESOLVE EWI!!! /*** SSC-EWI-TS0025 - CUSTOM UDF 'ERROR_SEVERITY_UDF' INSERTED FOR ERROR_SEVERITY FUNCTION. ***/!!!
ERROR_SEVERITY_UDF()`);
}
$$;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0026¶
Wenn „Delete Query“ auf „Create Table“ gesetzt ist.
Schweregrad¶
Niedrig
Beschreibung¶
Diese EWI wird hinzugefügt, wenn ein allgemeiner Tabellenausdruck mit einem „Delete From“-Ausdruck in einen „Create Table“ oder „Replace Table“-Ausdruck umgewandelt wird.
Codebeispiel¶
Eingabecode:¶
WITH Duplicated AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) AS RN
FROM WithQueryTest
)
DELETE FROM Duplicated
WHERE Duplicated.RN > 1
Generierter Code:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0026 - WITH DELETE QUERY TURNED TO CREATE TABLE ***/!!!
CREATE OR REPLACE TABLE WithQueryTest AS
SELECT
*
FROM
WithQueryTest
QUALIFY
ROW_NUMBER()
OVER (PARTITION BY
ID
ORDER BY ID) = 1;
Best Practices¶
Es sind keine weiteren Aktionen des Benutzers erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0032¶
Masseneinfügen teilweise übersetzt
Warnung
Die EWI wird nur generiert, wenn Javascript die Zielsprache für gespeicherte Prozeduren ist. Dies ist ein veraltetes Feature für die Übersetzung, da Snowflake Scripting die empfohlene Zielsprache für gespeicherte Prozeduren ist.
Schweregrad¶
Hoch
Bemerkung
Generieren Sie Prozeduren und Makros mit JavasScript als Zielsprache, indem Sie die folgende Option hinzufügen: -t JavaScript or –PLTargetLanguage JavaScript.
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese EWI wird zu einem Literal hinzugefügt, das ursprünglich eine Verkettung war, wenn der enthaltene Code eine BULK INSERT-Anweisung hatte. Der Befehl PUT, der sich aus der Übersetzung BULK INSERT ergibt, wird nicht unterstützt, wenn Code ausgeführt wird, der ursprünglich Dynamic SQL war.
Aus diesem Grund muss der PUT-Befehl muss aus dem Ausgabecode extrahiert und manuell außerhalb der Prozedur ausgeführt werden, die ihn enthält. Beachten Sie, dass es ratsam ist, eine Prozedur aufzuteilen, wenn viele BULK INSERT-Anweisungen in Dynamic SQL-Sätzen in der Prozedur enthalten sind. Dadurch können Sie für jede übersetzte BULK INSERT-Funktion den entsprechenden PUT-Befehl manuell ausführen.
Codebeispiel¶
Eingabecode:¶
-- Additional Params: -t JavaScript
CREATE PROCEDURE [dbo].[Load_FuelMgtMasterData]
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@SQLString VARCHAR(500)
, @ImportName VARCHAR(200)
, @Today DATE
, @Yesterday DATE
, @SourceAffiliates VARCHAR(200);
SET @Today = GETDATE();
SET @Yesterday = DATEADD(DAY, -1, @Today);
TRUNCATE TABLE dbo.SourceFM_Affiliates;
SET @ImportName = '\\' + +@@ServerName
+ '\WorkA\merchantportal\affiliates.txt';
SET @SQLString = 'BULK INSERT ' + @SourceAffiliates + ' FROM '''
+ @ImportName + '''';
EXEC (@SQLString);
END;
Generierter Code:¶
CREATE OR REPLACE PROCEDURE dbo.Load_FuelMgtMasterData ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
// SnowConvert AI Helpers Code section is omitted.
/*** SSC-EWI-0040 - THE 'SET' CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/
/* SET NOCOUNT ON*/
;
let SQLSTRING;
let IMPORTNAME;
let TODAY;
let YESTERDAY;
let SOURCEAFFILIATES;
TODAY = SELECT(` CURRENT_TIMESTAMP() :: TIMESTAMP`);
YESTERDAY = SELECT(` DATEADD(DAY, -1, ?)`,[TODAY]);
EXEC(` TRUNCATE TABLE dbo.SourceFM_Affiliates`);
IMPORTNAME = `\\` + SERVERNAME + `\WorkA\merchantportal\affiliates.txt`;
SQLSTRING =
// ** SSC-EWI-TS0032 - THE BULK INSERT WAS PART OF A DYNAMIC SQL, WHICH MAKES SOME OF THE TRANSLATED ELEMENTS INVALID UNLESS EXECUTED OUTSIDE DYNAMIC CODE. **
`CREATE OR REPLACE FILE FORMAT FILE_FORMAT_638923328992788100;
CREATE OR REPLACE STAGE STAGE_638923328992788100
FILE_FORMAT = FILE_FORMAT_638923328992788100;
PUT file://${IMPORTNAME} @STAGE_638923328992788100 AUTO_COMPRESS = FALSE;
COPY INTO ${SOURCEAFFILIATES}
FROM @STAGE_638923328992788100/${IMPORTNAME}`;
EXEC(`${SQLSTRING}`);
$$;
Best Practices¶
Extrahieren Sie den
PUT-Befehl, der aus der DynamicBULK INSERT-Anweisung resultiert, und führen Sie ihn aus, bevor Sie die Prozedur aufrufen.Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0034¶
RETURNS-Klausel unvollständig aufgrund fehlender Symbole
Schweregrad¶
Hoch
Beschreibung¶
Diese EWI wird dem Ausgabecode hinzugefügt, wenn die RETURNS TABLE-Klausel einer CREATE FUNCTION nicht ordnungsgemäß generiert werden konnte. Dies geschieht, wenn die Spalten, die in der resultierenden RETURNS TABLE-Klausel angegeben werden müssen, von SnowConvert AI nicht ermittelt werden können und die RETURNS TABLE-Klausel daher leer bleibt.
Codebeispiel¶
Eingabecode:¶
CREATE FUNCTION Sales.ufn_SalesByStore2()
RETURNS TABLE
AS
RETURN
(
WITH CTE AS (
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
)
SELECT tab.* FROM CTE tab
);
GO
SELECT * FROM GetDepartmentInfo();
Generierter Code:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "HumanResources.Department" **
CREATE OR REPLACE FUNCTION Sales.ufn_SalesByStore2 ()
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": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
AS
$$
--** SSC-PRF-TS0001 - PERFORMANCE WARNING - RECURSION FOR CTE NOT CHECKED. MIGHT REQUIRE RECURSIVE KEYWORD **
WITH CTE AS (
SELECT
DepartmentID,
Name,
GroupName
FROM
HumanResources.Department
)
SELECT tab.* FROM
CTE tab
$$;
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "GetDepartmentInfo" **
SELECT
*
FROM
TABLE(GetDepartmentInfo());
Best Practices¶
Die Ursachen für dieses Problem können variieren. Stellen Sie sicher, dass Sie alle Objekte enthalten, die Ihr Code benötigt. Wenn das Problem weiterhin besteht, obwohl die Migration Zugriff auf alle erforderlichen Objekte hat, kontaktieren Sie uns mit Informationen zu Ihrem speziellen Szenario.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0035¶
Das Deklarieren einer Cursorvariablen, bei der sie nie initialisiert wurde, wird nicht unterstützt.
Schweregrad¶
Medium
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Derzeit wird eine Cursorvariable, die deklariert, aber nie initialisiert ist, von SnowFlake nicht unterstützt. Somit wird die EWI hinzugefügt, und der Code wird auskommentiert.
Codebeispiel¶
Eingabecode:¶
CREATE OR ALTER PROCEDURE notInitializedCursorTest
AS
BEGIN
-- Should be marked with SSC-EWI-TS0035
DECLARE @MyCursor CURSOR, @MyCursor2 CURSOR;
-- Should not be marked
DECLARE cursorVar CURSOR FORWARD_ONLY STATIC READ_ONLY
FOR
SELECT someCol
FROM someTable;
RETURN 'DONE';
END;
Generierter Code:¶
CREATE OR REPLACE PROCEDURE notInitializedCursorTest ()
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-EWI-TS0035
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0035 - CURSOR VARIABLE DECLARED BUT NEVER INITIALIZED, THIS IS NOT SUPPORTED IN SNOWFLAKE SCRIPTING ***/!!!
MYCURSOR CURSOR;
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0035 - CURSOR VARIABLE DECLARED BUT NEVER INITIALIZED, THIS IS NOT SUPPORTED IN SNOWFLAKE SCRIPTING ***/!!!
MYCURSOR2 CURSOR;
-- Should not be marked
cursorVar CURSOR
FOR
SELECT
someCol
FROM
someTable;
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-EWI-TS0036¶
Snowflake Scripting unterstützt nur lokale Cursor.
Schweregrad¶
Medium
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese EWI wird hinzugefügt, wenn andere Cursor als lokale Cursor identifiziert werden. Derzeit unterstützt Snowflake Scripting nur lokale Cursor. Daher werden alle Cursor als lokale Cursor übersetzt.
Codebeispiel¶
Eingabecode:¶
CREATE OR ALTER PROCEDURE globalCursorTest
AS
BEGIN
-- Should be marked with SSC-EWI-TS0036
DECLARE MyCursor CURSOR GLOBAL STATIC READ_ONLY
FOR
SELECT *
FROM exampleTable;
-- Should not be marked
DECLARE MyCursor2 CURSOR LOCAL STATIC READ_ONLY
FOR
SELECT testCol
FROM myTable;
RETURN 'DONE';
END;
CREATE OR REPLACE PROCEDURE globalCursorTest ()
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-EWI-TS0036
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0036 - SNOWFLAKE SCRIPTING ONLY SUPPORTS LOCAL CURSORS ***/!!!
MyCursor CURSOR
FOR
SELECT
*
FROM
exampleTable;
-- Should not be marked
MyCursor2 CURSOR
FOR
SELECT
testCol
FROM
myTable;
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-EWI-TS0037¶
Snowflake Scripting-Cursor sind nicht scrollbar.
Schweregrad¶
Medium
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Snowflake Scripting-Cursor sind nicht scrollbar. Derzeit wird nur FETCH NEXT unterstützt.
Codebeispiel¶
Eingabecode:¶
CREATE OR ALTER PROCEDURE scrollablecursorTest
AS
BEGIN
-- Should be marked with SSC-EWI-TS0037
DECLARE CursorVar CURSOR SCROLL STATIC READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
-- Should not be marked
DECLARE CursorVar2 CURSOR STATIC READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar3 CURSOR FORWARD_ONLY STATIC READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
RETURN 'DONE';
END;
Generierter Code:¶
CREATE OR REPLACE PROCEDURE scrollablecursorTest ()
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-EWI-TS0037
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0037 - SNOWFLAKE SCRIPTING CURSORS ARE NON-SCROLLABLE, ONLY FETCH NEXT IS SUPPORTED ***/!!!
CursorVar CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
-- Should not be marked
CursorVar2 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
CursorVar3 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-EWI-TS0039¶
Für den gleichen Cursor wurden mehrere SET-Anweisungen gefunden.
Schweregrad¶
Medium
Beschreibung¶
Diese EWI wird hinzugefügt, wenn mehrere SET-Anweisungen für denselben Cursor gefunden werden. Alle zusätzlichen SET-Anweisungen werden ebenfalls auskommentiert. Dies geschieht, weil mehrere SET-Anweisungen für denselben Cursor in Snowflake Scripting nicht zulässig sind.
Beispielcode:¶
Diese EWI wird hinzugefügt, wenn mehrere SET-Anweisungen für denselben Cursor gefunden werden. Alle zusätzlichen SET-Anweisungen werden ebenfalls auskommentiert. Dies geschieht, weil mehrere SET-Anweisungen für denselben Cursor in Snowflake Scripting nicht zulässig sind.¶
Beispielcode:¶
Eingabecode:¶
CREATE OR ALTER PROCEDURE multipleSetExample
AS
BEGIN
DECLARE @MyCursor CURSOR;
DECLARE @MyCursor2 CURSOR STATIC READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
DECLARE @MyCursor3 CURSOR;
SET @MyCursor = CURSOR STATIC READ_ONLY
FOR
SELECT col3
FROM defaultTable;
SET @MyCursor3 = CURSOR STATIC READ_ONLY
FOR
SELECT *
FROM someTable;
SET @MyCursor = CURSOR DYNAMIC
FOR
SELECT col2
FROM exampleTable;
SET @MyCursor2 = CURSOR STATIC READ_ONLY
FOR
SELECT col3
FROM defaultTable;
RETURN 'DONE';
END;
Generierter Code:¶
CREATE OR REPLACE PROCEDURE multipleSetExample ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
MYCURSOR CURSOR
FOR
SELECT col3
FROM defaultTable;
MYCURSOR2 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
MYCURSOR3 CURSOR
FOR
SELECT *
FROM someTable;
BEGIN
DECLARE
MYCURSOR CURSOR
FOR
SELECT col3
FROM defaultTable;
MYCURSOR2 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
MYCURSOR3 CURSOR
FOR
SELECT *
FROM someTable;
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE 'SET CURSOR' CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-TS0039 - CURSOR VARIABLE MYCURSOR SET MULTIPLE TIMES, THIS IS NOT VALID IN SNOWFLAKE SCRIPTING ***/!!!
SET @MyCursor = CURSOR DYNAMIC
FOR
SELECT col2
FROM exampleTable;
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE 'SET CURSOR' CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-TS0039 - CURSOR VARIABLE MYCURSOR2 SET MULTIPLE TIMES, THIS IS NOT VALID IN SNOWFLAKE SCRIPTING ***/!!!
SET @MyCursor2 = CURSOR STATIC READ_ONLY
FOR
SELECT col3
FROM defaultTable;
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-EWI-TS0041¶
XML-Datentypmethoden werden in Snowflake nicht unterstützt.
Schweregrad¶
Medium
Beschreibung¶
Diese EWI wird für die folgenden XML-Datentypmethoden hinzugefügt, die in Snowflake SQL nicht unterstützt werden:
Wert
Abfrage
Vorhanden
Ändern
Knoten
Codebeispiel¶
Eingabecode:¶
CREATE PROCEDURE xml_procedure
@inUserGroupsXML XML
AS
BEGIN
SELECT entities.entity.value('TypeID[1]', 'VARCHAR(100)') AS TypeID
,entities.entity.value('Name[1]', 'VARCHAR(100)') AS Name
INTO #tmpUserGroups
FROM @inUserGroupsXML.nodes('/entities/entity') entities(entity)
END;
Generierter Code:¶
CREATE OR REPLACE PROCEDURE xml_procedure (INUSERGROUPSXML TEXT)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
CREATE OR REPLACE TEMPORARY TABLE T_tmpUserGroups AS
SELECT
XMLGET(entity, '$') :: VARCHAR(100) AS TypeID
,
XMLGET(entity, '$') :: VARCHAR(100) AS Name
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0041 - XML TYPE METHOD nodes IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
T_inUserGroupsXML('/entities/entity') entities (
entity
);
END;
$$;
Best Practices¶
Erwägen Sie die Verwendung von UDFs, um das Verhalten des Quellcodes zu emulieren.
Sie können diese Dokumentation prüfen und einige mögliche Ansätze für die Arbeit mit XML-Datentypen in Snowflake prüfen.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0043¶
WITH XMLNAMESPACES wird von Snowflake nicht unterstützt.
Schweregrad¶
Medium
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese EWI wird für die WITH XMLNAMESPACES-Klausel hinzugefügt, die von Snowflake SQL nicht unterstützt wird.
Codebeispiel¶
Eingabecode:¶
WITH XMLNAMESPACES ('uri' as ns1)
SELECT ProductID as 'ns1:ProductID',
Name as 'ns1:Name',
Color as 'ns1:Color'
FROM Production.Product
WHERE ProductID = 316
FOR XML RAW, ELEMENTS XSINIL
Generierter Code:¶
--** SSC-PRF-TS0001 - PERFORMANCE WARNING - RECURSION FOR CTE NOT CHECKED. MIGHT REQUIRE RECURSIVE KEYWORD **
WITH
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0043 - WITH XMLNAMESPACES IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
XMLNAMESPACES ('uri' as VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-TS0015 - DATA TYPE NS1 IS NOT SUPPORTED IN SNOWFLAKE ***/!!! NOT NULL)
SELECT
ProductID AS "ns1:ProductID",
Name AS "ns1:Name",
Color AS "ns1:Color"
FROM
Production.Product
WHERE
ProductID = 316
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0044 - FOR XML RAW CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR XML RAW, ELEMENTS XSINIL;
Best Practices¶
Erwägen Sie die Verwendung von UDFs, um das Verhalten des Quellcodes zu emulieren. Der folgende Code liefert Vorschläge für UDFs die verwendet werden können, um das Wiederherstellen des ursprünglichen Verhaltens zu erreichen:
SQL Server¶
CREATE TABLE PRODUCT (ProductID INTEGER, Name VarChar(20), Color VarChar(20));
INSERT INTO PRODUCT(PRODUCTID, NAME, COLOR) VALUES(1,'UMBRELLA','RED');
INSERT INTO PRODUCT(PRODUCTID, NAME, COLOR) VALUES(2,'SHORTS','BLUE');
INSERT INTO PRODUCT(PRODUCTID, NAME, COLOR) VALUES(3,'BALL','YELLOW');
WITH XMLNAMESPACES ('uri' as ns1)
SELECT ProductID as 'ns1:ProductID',
Name as 'ns1:Name',
Color as 'ns1:Color'
FROM Product
FOR XML RAW
Snowflake SQL¶
CREATE OR REPLACE TABLE PRODUCT (
ProductID INTEGER,
Name VARCHAR(20),
Color VARCHAR(20))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "07/12/2024" }}'
;
INSERT INTO PRODUCT (PRODUCTID, NAME, COLOR) VALUES(1,'UMBRELLA','RED');
INSERT INTO PRODUCT (PRODUCTID, NAME, COLOR) VALUES(2,'SHORTS','BLUE');
INSERT INTO PRODUCT (PRODUCTID, NAME, COLOR) VALUES(3,'BALL','YELLOW');
--** SSC-PRF-TS0001 - PERFORMANCE WARNING - RECURSION FOR CTE NOT CHECKED. MIGHT REQUIRE RECURSIVE KEYWORD **
WITH
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0043 - WITH XMLNAMESPACES IS NOT SUPPORTED IN SNOWFLAKE ***/!!! XMLNAMESPACES ('uri' as ns1)
SELECT
ProductID AS "ns1:ProductID",
Name AS "ns1:Name",
Color AS "ns1:Color"
FROM
Product
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0044 - FOR XML RAW CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR XML RAW;
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
Zugehörige EWI¶
SSC-PRF-TS0001: Leistungswarnung – Rekursion für CTE nicht geprüft. Möglicherweise ist ein rekursives Schlüsselwort erforderlich.
SSC-EWI-TS0044: FOR XML-Klausel wird in Snowflake nicht unterstützt.
SSC-EWI-TS0015: Datentyp, der von Snowflake nicht unterstützt wird
SSC-EWI-TS0044¶
FOR XML-Klausel wird in Snowflake nicht unterstützt.
Schweregrad¶
Kritisch
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese EWI wird für die FOR XML-Klausel hinzugefügt, die in Snowflake SQL nicht unterstützt wird.
Codebeispiel¶
Eingabecode:¶
SELECT TOP 1 LastName
FROM AdventureWorks2019.Person.Person
FOR XML AUTO;
Generierter Code:¶
SELECT TOP 1
LastName
FROM
AdventureWorks2019.Person.Person
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0044 - FOR XML AUTO CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR XML AUTO;
Best Practices¶
Erwägen Sie die Verwendung von UDFs, um das Verhalten des Quellcodes zu emulieren. Der folgende Code liefert Vorschläge für UDFs die verwendet werden können, um das Wiederherstellen des ursprünglichen Verhaltens zu erreichen:
SQL Server
Abfrage¶
CREATE TABLE TEMPTABLE (Ref INT, Des NVARCHAR(100), Qty INT)
INSERT INTO tempTable VALUES (100001, 'Normal', 1), (100002, 'Foobar', 1), (100003, 'Hello World', 2)
GO
-- FOR XML
SELECT *
FROM TempTable
FOR XML AUTO
GO
-- FOR XML RAW
SELECT *
FROM TempTable
FOR XML RAW
Ergebnis¶
-- FOR XML
<TempTable Ref="100001" Des="Normal" Qty="1"/><TempTable Ref="100002" Des="Foobar" Qty="1"/><TempTable Ref="100003" Des="Hello World" Qty="2"/>
-- FOR XML RAW
<row Ref="100001" Des="Normal" Qty="1"/><row Ref="100002" Des="Foobar" Qty="1"/><row Ref="100003" Des="Hello World" Qty="2"/>
Snowflake¶
Abfrage¶
CREATE OR REPLACE TABLE TEMPTABLE (
Ref INT,
Des VARCHAR(100),
Qty INT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
INSERT INTO tempTable VALUES (100001, 'Normal', 1), (100002, 'Foobar', 1), (100003, 'Hello World', 2);
-- FOR XML
SELECT
*
FROM
TempTable
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0044 - FOR XML AUTO CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR XML AUTO;
-- FOR XML RAW
SELECT
*
FROM
TempTable
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0044 - FOR XML RAW CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR XML RAW;
Ergebnis¶
-- FOR XML
<TempTable DES="Normal" QTY="1" REF="100001" /><TempTable DES="Foobar" QTY="1" REF="100002" /><TempTable DES="Hello World" QTY="2" REF="100003" />
-- FOR XML RAW
<row DES="Normal" QTY="1" REF="100001" /><row DES="Foobar" QTY="1" REF="100002" /><row DES="Hello World" QTY="2" REF="100003" />
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0045¶
Beschriftete -Anweisung wird in Snowflake Scripting nicht unterstützt.
Schweregrad¶
Niedrig
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese EWI wird für alle LABELS hinzugefügt, die mit der [GOTO-Anweisung](https://docs.microsoft.com/en-us/sql/t-sql/ Language-elements/goto-transact-sql?view=sql-server-ver15) in SQL Server verwendet werden.
Codebeispiel¶
Eingabecode:¶
CREATE PROCEDURE GoToProcedure
AS
BEGIN
DECLARE @TotalMaarks INT
SET @TotalMaarks = 49
IF @TotalMaarks >= 50
GOTO Pass
IF @TotalMaarks < 50
GOTO Fail
Pass:
SELECT 1;
SELECT * FROM TABLE1;
RETURN 1;
Fail:
SELECT 2;
SELECT * FROM TABLE2;
RETURN 2;
END
Generierter Code:¶
CREATE OR REPLACE PROCEDURE GoToProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
TOTALMAARKS INT;
BEGIN
TOTALMAARKS := 49;
IF (:TOTALMAARKS >= 50) THEN
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'GOTO' NODE ***/!!!
GOTO Pass
END IF;
IF (:TOTALMAARKS < 50) THEN
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'GOTO' NODE ***/!!!
GOTO Fail
END IF;
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0045 - LABELED STATEMENT IS NOT SUPPORTED IN SNOWFLAKE SCRIPTING ***/!!!
Pass:
SELECT 1;
SELECT
*
FROM
TABLE1;
RETURN 1;
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0045 - LABELED STATEMENT IS NOT SUPPORTED IN SNOWFLAKE SCRIPTING ***/!!!
Fail:
SELECT 2;
SELECT
*
FROM
TABLE2;
RETURN 2;
END;
$$;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
Zugehörige EWI¶
SSC-EWI-0073: Überprüfung der gleichwertigen Funktion ausstehend.
SSC-EWI-TS0046¶
Systemtabellen werden in Snowflake nicht unterstützt.
Schweregrad¶
Medium
Beschreibung¶
Diese EWI wird hinzugefügt, wenn auf SQL Server-Systemtabellen verwiesen wird, die nicht unterstützt werden oder in Snowflake SQL kein Äquivalent besitzen. Klicken Sie hier, um eine vollständige Liste der unterstützten und nicht unterstützten Systemtabellen zu finden.
Codebeispiel¶
Eingabecode:¶
SELECT *
FROM
sys.all_sql_modules
WHERE
[STATE] = 0; -- state must be ONLINE
Generierter Code:¶
SELECT
*
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0046 - SYSTEM TABLE sys.all_sql_modules IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
sys.all_sql_modules
WHERE
STATE = 0; -- state must be ONLINE
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0047¶
Die Fehlermeldung RAISERROR kann aufgrund des SQL-Zeichenfolgenformats abweichen.
Bemerkung
Diese EWI ist veraltet. Weitere Informationen finden Sie unter SSC-FDM-TS0019.
Schweregrad¶
Niedrig
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
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0047 - 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-EWI-TS0049¶
Eine Übersetzung für If-Blöcke mit mehreren Zeilen ist für die Zukunft vorgesehen.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Schweregrad¶
Medium
Beschreibung¶
In den meisten Fällen werden IF-Anweisungen unterstützt, die einen Begin ... End-Block in ihrem Text enthalten. Dies ist ein erfolgreicher Anwendungsfall, (bei dem kein SSC-EWI-TS0049 erzeugt wird).
Codebeispiel¶
Eingabecode:¶
CREATE OR ALTER FUNCTION [PURCHASING].[FOO](@status INT)
Returns INT
As
Begin
declare @result as int = 10;
SELECT @result = quantity FROM TABLE1 WHERE COL1 = @status;
IF @result = 3
BEGIN
IF @result>0 SELECT @result=0 ELSE SELECT @result=1
SELECT @result = 1
END
return @result;
End
Generierter Code:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0068 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE ***/!!!
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "TABLE1" **
CREATE OR REPLACE PROCEDURE PURCHASING.FOO (STATUS INT)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
RESULT INT := 10;
BEGIN
SELECT
quantity
INTO
:RESULT
FROM
TABLE1
WHERE
COL1 = :STATUS;
IF (:RESULT = 3) THEN
BEGIN
IF (:RESULT >0) THEN SELECT
0
INTO
:RESULT;
ELSE
SELECT
1
INTO
:RESULT;
END IF;
SELECT
1
INTO
:RESULT;
END;
END IF;
RETURN :RESULT;
END;
$$;
Bemerkung
In einem allgemeinen Codebeispiel (wie oben) wird die Konvertierung erfolgreich durchgeführt. Es gibt jedoch einige Grenzfälle, bei denen die „IF“-Anweisung nicht konvertiert und die EWI generiert wird.
Manuelle Unterstützung¶
Fall 1: Einzelne Anweisung¶
In diesen Fällen wäre die Transformation einfach, da die transformierte Anweisung in einer „Select“-Klausel erscheinen würde
IF @result = 0
BEGIN
SET @result =1
END
CASE WHEN (SELECT RESULT FROM CTE2)= 0 THEN
( SELECT 1 AS RESULT )
Fall 2: Mehrere Anweisungen¶
In Fällen, in denen mehrere Anweisungen transformiert werden, sollte die N-Anweisung transformiert und als Quelltabelle für die N+1-Anweisung verwendet werden.
IF @result = 0
BEGIN
Statement1
Statement2
Statement3
END
CASE WHEN (SELECT RESULT FROM CTE2)= 0 THEN
(
SELECT TransformedStatement3
FROM (
SELECT TransformedStatement2
FROM (
SELECT TransformedStatement1
) T1
) T2
)
Fall 3: Mehrere SET-Anweisungen¶
In diesen Fällen muss für jede Mengenanweisung eine Transformation repliziert werden.
IF @result = 0
BEGIN
SET @var1 = 1
SET @var2 = 3
SET @var3 = @var2
END
WITH CTE1 AS (
SELECT
CASE WHEN (SELECT
RESULT
FROM
CTE0) = 0 THEN
(SELECT 1) AS VAR1)
WITH CTE2 AS (
SELECT
CASE WHEN (SELECT
RESULT
FROM
CTE0)= 0 THEN
(SELECT 3) AS VAR2)
WITH CTE3 AS (
SELECT
CASE WHEN (SELECT
RESULT
FROM
CTE0)= 0 THEN
(SELECT T1.VAR2
FROM ((SELECT 3) AS VAR2) AS T1) AS VAR3)
...
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0055¶
Die Standard-Einschränkung wurde auskommentarisiert und wurde möglicherweise zu einer Tabellendefinition hinzugefügt.
Bemerkung
Diese EWI ist veraltet. Weitere Informationen finden Sie unter SSC-FDM-TS0020.
Schweregrad¶
Medium
Beschreibung¶
Diese EWI wird hinzugefügt, wenn die Standardeinschränkung in einer Alter Table-Anweisung vorhanden ist.
Derzeit gibt es keine Unterstützung für diese Einschränkung. Eine Problemumgehung, die zur Verfügung steht, um sie umzuwandeln, besteht darin, dass die Tabelle zuvor für die Änderungstabelle definiert wurde. Auf diese Weise werden die Referenzen identifiziert, und die Standardeinschränkung wird auf die Tabellendefinition vereinheitlicht. 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 30 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,
CONSTRAINT col1_constraint
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0055 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION ***/!!!
DEFAULT 50 FOR col1,
CONSTRAINT col1_constraint
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0055 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION ***/!!!
DEFAULT 30 FOR col1;
Bemerkung
Wenn der gesamte Inhalt der Änderungstabelle ungültig ist, wird die Änderungstabelle auskommentiert.
Bekannte Probleme¶
Wenn für dieselbe Spalte verschiedene Standardeinschränkungen deklariert sind, wird in der Anweisung „Create Table“ nur die erste berücksichtigt.
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0056¶
Eine MASKING POLICY wurde als Ersatz für MASKED WITH erstellt.
Bemerkung
Diese EWI ist veraltet. Weitere Informationen finden Sie unter SSC-FDM-TS0021.
Schweregrad¶
Niedrig
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:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0057 - 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!!!RESOLVE EWI!!! /*** SSC-EWI-TS0056 - 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 ist zu erwarten, dass das Verhalten nur ungefähr dem Original entspricht. In Bezug auf Rollen und Benutzerberechtigungen können einige Anpassungen erforderlich sein. <!– TODO: You can relate to Broken link broken-reference „mention“ for further details.>
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0057¶
Der Benutzer muss zuvor die Maskierungsrolle definieren.
Bemerkung
Diese EWI ist veraltet. Weitere Informationen finden Sie unter SSC-FDM-TS0022.
Schweregrad¶
Niedrig
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:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0057 - 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!!!RESOLVE EWI!!! /*** SSC-EWI-TS0056 - 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-EWI-TS0060¶
Datumszeitintervall wird von Snowflake nicht unterstützt.
Schweregrad¶
Medium
Beschreibung¶
Diese EWI wird hinzugefügt, wenn eine der folgenden Zeitkomponenten als Parameter für eine datumsbezogene Funktion verwendet wird, da sie in Snowflake nicht unterstützt werden. Weitere Informationen finden Sie unter „supported date time parts“ in der [Snowflake-Dokumentation zu Datum- und Zeitfunktionen].(https://docs.snowflake.com/en/sql-reference/functions-date-time#label-supported-date-time-parts)).
Codebeispiel¶
Eingabecode¶
SELECT
-- Supported
DATEPART(second, getdate()),
-- Not supported
DATEPART(millisecond, getdate()),
DATEPART(microsecond, getdate());
Generierter Code:¶
SELECT
-- Supported
DATE_PART(second, CURRENT_TIMESTAMP() :: TIMESTAMP),
-- Not supported
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0060 - TIME PART 'millisecond' NOT SUPPORTED AS A FUNCTION PARAMETER ***/!!!
DATEPART(millisecond, CURRENT_TIMESTAMP() :: TIMESTAMP),
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0060 - TIME PART 'microsecond' NOT SUPPORTED AS A FUNCTION PARAMETER ***/!!!
DATEPART(microsecond, CURRENT_TIMESTAMP() :: TIMESTAMP);
Best Practices¶
Ein UDF könnte erstellt werden, um nicht unterstützte Zeitkomponenten in Snowflake manuell zu extrahieren.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0061¶
ALTER COLUMN wird nicht unterstützt
Schweregrad¶
Medium
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese EWI wird immer dann hinzugefügt, wenn es eine nicht unterstützte ALTER COLUMN-Anweisung gibt.
Codebeispiel¶
Eingabecode:¶
ALTER TABLE SampleTable
ALTER COLUMN SampleColumn INT NULL SPARSE;
Generierter Code:¶
ALTER TABLE IF EXISTS SampleTable
ALTER COLUMN SampleColumn
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0061 - ALTER COLUMN COMMENTED OUT BECAUSE SPARSE COLUMN IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
INT NULL SPARSE;
Best Practices¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0063¶
Zeitzone, die in Snowflake nicht unterstützt wird.
Schweregrad¶
Kritisch
Beschreibung¶
Diese EWI wird hinzugefügt, wenn es Zeitzonen gibt, die in Snowflake nicht unterstützt werden.
Codebeispiel¶
Eingabecode:¶
SELECT current_timestamp at time zone 'Turks And Caicos Standard Time';
Generierter Code:¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0063 - TIME ZONE NOT SUPPORTED IN SNOWFLAKE ***/!!!
CURRENT_TIMESTAMP() at time zone 'Turks And Caicos Standard Time'
;
Best Practices¶
Eine benutzerdefinierte Funktion kann erstellt werden, um mehrere Zeitzonen zu unterstützen.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0067¶
Ungültige Parameter in OPENXML-Tabellenfunktion.
Schweregrad¶
Kritisch
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese EWI wird hinzugefügt, wenn es in OPENXML ungültige Parameter gibt; dies gilt vor allem dann, wenn kein Zugriff auf den XML-Pfad möglich ist.
Um diese EWI zu vermeiden, senden Sie den expliziten Knotenpfad über die Parameter.
Eingabecode:¶
SELECT
*
FROM
OPENXML (@idoc, @path, 1) WITH (
CustomerID VARCHAR(10),
ContactName VARCHAR(20)
);
Generierter Code:¶
SELECT
*
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0067 - INVALID PARAMETERS IN OPENXML TABLE-VALUED FUNCTION ***/!!!
OPENXML(@idoc, @path, 1);
Eingabecode (expliziter Parameter)¶
SELECT
*
FROM
OPENXML (@idoc, '/ROOT/Customer', 1) WITH(
CustomerID VARCHAR(10),
ContactName VARCHAR(20)
);
Generierter Code (explizite Parameter)¶
SELECT
Left(value:Customer['@CustomerID'], '10') AS 'CustomerID',
Left(value:Customer['@ContactName'], '20') AS 'ContactName'
FROM
OPENXML_UDF($idoc, ':ROOT:Customer');
Best Practices¶
Versuchen Sie herauszufinden, ob der Pfad explizit als Parameter übergeben werden kann.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0070¶
CURRENT_TIMESTAMP in At Time Zone-Anweisung kann in bestimmten Fällen ein anderes Verhalten aufweisen.
Bemerkung
Diese EWI ist veraltet. Weitere Informationen finden Sie unter SSC-FDM-TS0024.
Beschreibung¶
Diese EWI wird hinzugefügt, wenn „At Time Zone“ CURRENT_TIMESTAMP verwendet. Dies liegt daran, dass das Ergebnis in einigen Instanzen unterschiedliche Ergebnisse liefern 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() !!!RESOLVE EWI!!! /*** SSC-EWI-TS0070 - 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-EWI-TS0072¶
Die RETURN-Anweisung wird aufgrund vorheriger RETURN-Anweisungen ignoriert.
Schweregrad¶
Niedrig
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese EWI wird hinzugefügt, wenn SELECT-Anweisungen und OUPUT-Parameter zurückgegeben werden sollen. In diesem Fall haben die Resultsets von SELECT-Anweisungen Vorrang.
Eingabecode:¶
CREATE PROCEDURE SOMEPROC(@product_count INT OUTPUT, @123 INT OUTPUT)
AS
BEGIN
SELECT * from AdventureWorks.HumanResources.Department;
SELECT * from AdventureWorks.HumanResources.Employee;
END
Generierter Code:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "AdventureWorks.HumanResources.Department", "AdventureWorks.HumanResources.Employee" **
CREATE OR REPLACE PROCEDURE SOMEPROC (PRODUCT_COUNT OUT INT, _123 OUT INT)
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "07/16/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
ProcedureResultSet1 VARCHAR;
ProcedureResultSet2 VARCHAR;
return_arr ARRAY := array_construct();
BEGIN
ProcedureResultSet1 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet1) AS
SELECT
*
from
AdventureWorks.HumanResources.Department;
return_arr := array_append(return_arr, :ProcedureResultSet1);
ProcedureResultSet2 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet2) AS
SELECT
*
from
AdventureWorks.HumanResources.Employee;
return_arr := array_append(return_arr, :ProcedureResultSet2);
--** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
RETURN return_arr;
END;
$$;
Best Practices¶
Entfernen Sie die RETURN-Anweisung, die ignoriert werden soll.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
Zugehörige EWI¶
SSC-FDM-0020: In temporären Tabellen werden mehrere Resultsets zurückgegeben.
SSC-EWI-TS0073¶
Die Fehlermeldung könnte in Snowflake anders lauten.
Bemerkung
Diese EWI ist veraltet. Weitere Informationen finden Sie unter SSC-FDM-TS0023.
Schweregrad¶
Niedrig
Beschreibung¶
Diese EWI wird bei der Transformation von ERROR_MESSAGE() hinzugefügt. Die genaue Fehlermeldung kann sich in Snowflake ändern.
Eingabecode:¶
SET @varErrorMessage = ERROR_MESSAGE()
Generierter Code¶
BEGIN
VARERRORMESSAGE := SQLERRM !!!RESOLVE EWI!!! /*** SSC-EWI-TS0073 - ERROR MESSAGE COULD BE DIFFERENT IN SNOWFLAKE ***/!!!;
END;
Empfehlung¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0074¶
Das Umwandlungsergebnis kann von der TRY_CAST/TRY_CONVERT-Funktion aufgrund fehlender Abhängigkeiten abweichen.
Schweregrad¶
Niedrig
Bemerkung
Einige Teile des Ausgabecodes werden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese EWI wird bei der Transformation von TRY_CAST- und TRY_CONVERT-Funktionen hinzugefügt. Das genaue Ergebnis dieser Funktionen kann sich in Snowflake aufgrund fehlender Abhängigkeiten ändern (SnowConvert AI konnte einige Datentypen nicht auflösen). Dies könnte daran liegen, dass die Abhängigkeit nicht im Quellcode enthalten ist.
Eingabecode:¶
SELECT TRY_CONVERT( INT, col1) FROM TABLE1;
SELECT TRY_CAST(COL1 AS FLOAT) FROM TABLE1
Generierter Code¶
SELECT
CAST(col1 AS INT) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/!!!RESOLVE EWI!!! /*** SSC-EWI-TS0074 - CAST RESULT MAY BE DIFFERENT FROM TRY_CONVERT FUNCTION DUE TO MISSING DEPENDENCIES ***/!!!
FROM
TABLE1;
SELECT
CAST(COL1 AS FLOAT) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/!!!RESOLVE EWI!!! /*** SSC-EWI-TS0074 - CAST RESULT MAY BE DIFFERENT FROM TRY_CAST FUNCTION DUE TO MISSING DEPENDENCIES ***/!!!
FROM
TABLE1;
Empfehlung¶
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0075¶
Integrierte Prozedur wird nicht unterstützt.
Schweregrad¶
Medium
Beschreibung¶
Die Übersetzung von integrierten Prozeduren wird derzeit nicht unterstützt.
Beispielcode¶
Eingabecode:¶
EXEC sp_column_privileges_rowset_rmt 'Caption';
Generierter Code:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0075 - TRANSLATION FOR BUILT-IN PROCEDURE 'sp_column_privileges_rowset_rmt' IS NOT CURRENTLY SUPPORTED. ***/!!!
EXEC sp_column_privileges_rowset_rmt 'Caption';
Best Practices¶
Es sind keine Aktionen des Endbenutzers erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0076¶
Standardparameter müssen möglicherweise neu angeordnet werden.
Bemerkung
Diese EWI ist veraltet. Weitere Informationen finden Sie unter SSC-EWI-0002.
Schweregrad¶
Medium
Beschreibung¶
Standardparameter müssen möglicherweise neu angeordnet werden. Snowflake unterstützt nur Standardparameter am Ende der Parameterdeklaration.
Beispielcode¶
Eingabecode:¶
CREATE PROCEDURE MySampleProc
@Param1 NVARCHAR(50) = NULL,
@Param2 NVARCHAR(10),
@Param3 NVARCHAR(10) = NULL,
@Param4 NVARCHAR(10)
AS
SELECT 1;
Generierter Code:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0076 - DEFAULT PARAMETERS MAY NEED TO BE REORDERED. SNOWFLAKE ONLY SUPPORTS DEFAULT PARAMETERS AT THE END OF THE PARAMETERS DECLARATIONS. ***/!!!
CREATE OR REPLACE PROCEDURE MySampleProc (PARAM1 STRING DEFAULT NULL, PARAM2 STRING, PARAM3 STRING DEFAULT NULL, PARAM4 STRING)
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
ProcedureResultSet RESULTSET;
BEGIN
ProcedureResultSet := (
SELECT 1);
RETURN TABLE(ProcedureResultSet);
END;
$$;
Best Practices¶
Es sind keine Aktionen des Endbenutzers erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0077¶
Collation wird nicht unterstützt.
Schweregrad¶
Niedrig
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'
-- !!!RESOLVE EWI!!! /*** SSC-EWI-TS0077 - COLLATION Albanian_BIN NOT SUPPORTED ***/!!!
-- COLLATE Albanian_BIN
;
SELECT 'a'
-- !!!RESOLVE EWI!!! /*** SSC-EWI-TS0077 - COLLATION Albanian_CI_AI NOT SUPPORTED ***/!!!
-- COLLATE Albanian_CI_AI
;
CREATE OR REPLACE TABLE ExampleTable (
ID INT,
Name VARCHAR(50)
-- !!!RESOLVE EWI!!! /*** SSC-EWI-TS0077 - 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 weiteren Aktionen des Benutzers erforderlich.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0078¶
Standardwert in Snowflake nicht zulässig.
Schweregrad¶
Medium
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
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0078 - 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-EWI-TS0079¶
Der Datenbank-Konsolenbefehl wird nicht unterstützt
Schweregrad¶
Medium
Beschreibung¶
Diese EWI 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:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0079 - 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-EWI-TS0080¶
Das Ändern des Ausführungskontexts zur Laufzeit wird von Snowflake nicht unterstützt.
Schweregrad¶
Hoch
Beschreibung¶
Benutzer in SQL Server können den Befehl EXECUTE AS verwenden, um den Ausführungskontext vorübergehend zu ändern. Dadurch werden die Ausführungsberechtigungen angepasst und das Ergebnis kontextabhängiger Funktionen wie USER_NAME() beeinflusst. Der REVERT-Befehl kann verwendet werden, um den Kontext vor dem letzten EXECUTE AS wiederherzustellen.
Snowflake unterstützt die Definition eines Ausführungskontexts nur in Prozeduren, und zwar entweder unter Verwendung der CREATE PROCEDURE oder der ALTER PROCEDURE-Anweisungen Das Ändern des Kontexts zur Laufzeit wird nicht unterstützt.
Codebeispiel¶
Eingabecode:
CREATE PROCEDURE proc1()
WITH EXECUTE AS OWNER
AS
BEGIN
SELECT USER_NAME();
EXECUTE AS CALLER;
SELECT USER_NAME();
REVERT;
SELECT USER_NAME();
END
GO
Ausgabecode:
CREATE OR REPLACE PROCEDURE proc1 ()
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "07/05/2024" }}'
EXECUTE AS OWNER
AS
$$
DECLARE
ProcedureResultSet1 VARCHAR;
ProcedureResultSet2 VARCHAR;
ProcedureResultSet3 VARCHAR;
return_arr ARRAY := array_construct();
BEGIN
ProcedureResultSet1 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet1) AS
SELECT
CURRENT_USER();
return_arr := array_append(return_arr, :ProcedureResultSet1);
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0080 - CHANGING THE EXECUTION CONTEXT AT RUNTIME IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
EXECUTE AS CALLER;
ProcedureResultSet2 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet2) AS
SELECT
CURRENT_USER();
return_arr := array_append(return_arr, :ProcedureResultSet2);
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0080 - CHANGING THE EXECUTION CONTEXT AT RUNTIME IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
REVERT;
ProcedureResultSet3 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet3) AS
SELECT
CURRENT_USER();
return_arr := array_append(return_arr, :ProcedureResultSet3);
--** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
RETURN return_arr;
END;
$$;
Best Practices¶
Überarbeiten Sie den Code so, dass er funktioniert, ohne den Kontext wechseln zu müssen.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0081¶
Die Verwendung von FULL JOIN in einer DELETE-Anweisung wird nicht unterstützt
Beschreibung¶
Beim Transformieren der DELETE-Anweisung extrahiert SnowConvert AI die in der FROM-Klausel gefundenen Tabellenverweise und verschiebt sie in die USING-Klausel der Snowflake-Delete-Anweisung.
Um die LEFT- und RIGHT-JOINs aus dem ursprünglichen Code beizubehalten, wird der Outer-Join-Operator (+) zu den Bedingungen hinzugefügt, um dieses Verhalten kenntlich zu machen. Allerdings kann die (+)-Syntax nicht verwendet werden, um FULL JOINs in Snowflake anzugeben. Diese EWI wird verwendet, um den Benutzer über diese Beschränkung zu informieren.
Beispielcode¶
Eingabecode:¶
DELETE Employees
FROM Employees FULL OUTER JOIN Departments
ON Employees.DepartmentID = Departments.DepartmentID
WHERE Departments.DepartmentID IS NULL;
Generierter Code:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0081 - USING A FULL JOIN IN A DELETE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
DELETE FROM
Employees
USING Departments
WHERE
Departments.DepartmentID IS NULL
AND Employees.DepartmentID = Departments.DepartmentID;
Best Practices¶
Überprüfen Sie die Logik Ihres FULL JOIN. Möglicherweise kann es als anderer JOIN-Typ umgeschrieben werden. Der im Beispielcode enthaltene Code entspricht beispielsweise im Wesentlichen einem LEFT JOIN:
Eingabe
DELETE Employees
FROM Employees LEFT OUTER JOIN Departments
ON Employees.DepartmentID = Departments.DepartmentID
WHERE Departments.DepartmentID IS NULL;
Ausgabe:
DELETE FROM
Employees
USING Departments
WHERE
Departments.DepartmentID IS NULL
AND Employees.DepartmentID = Departments.DepartmentID(+);
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0082¶
CROSS APPLY wurde in LEFT OUTER JOIN konvertiert und erfordert eine manuelle Validierung.
Beschreibung¶
Eine manuelle Validierung ist erforderlich, da die Konvertierung von CROSS APPLY zu LEFT OUTER JOIN möglicherweise zu falschen Ergebnissen oder unerwartetem Verhalten in Snowflake führen kann. Auch wenn die beiden Funktionen ähnlich zu sein scheinen, behandeln sie bestimmte Situationen unterschiedlich, insbesondere wenn die Unterabfrage keine Übereinstimmungen aufweist oder die Unterabfrage mit der äußeren Tabelle korreliert ist.
Beispielcode¶
Datenkonfiguration¶
-- Create a table to store monthly sales or metric data
CREATE TABLE sales_metrics (
metric_id INT PRIMARY KEY,
january_value VARCHAR(35),
february_value VARCHAR(35),
march_value VARCHAR(35)
);
-- Insert sample data
INSERT INTO sales_metrics (metric_id, january_value, february_value, march_value) VALUES
(1, 'sales-jan-1', 'sales-feb-1', 'sales-march-1'),
(2, 'sales-jan-2', 'sales-feb-2', 'sales-march-2');
Eingabecode:¶
SELECT
m.metric_id,
monthly_data.metric_value,
monthly_data.month_number
FROM
sales_metrics m
CROSS APPLY (
SELECT m.january_value AS metric_value, '01' AS month_number
UNION ALL
SELECT m.february_value AS metric_value, '02' AS month_number
UNION ALL
SELECT m.march_value AS metric_value, '03' AS month_number
) AS monthly_data;
Generierter Code:¶
SELECT
m.metric_id,
monthly_data.metric_value,
monthly_data.month_number
FROM
sales_metrics m
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0082 - CROSS APPLY HAS BEEN CONVERTED TO LEFT OUTER JOIN AND REQUIRES MANUAL VALIDATION. ***/!!!
LEFT OUTER JOIN
(
SELECT
m.january_value AS metric_value, '01' AS month_number
UNION ALL
SELECT
m.february_value AS metric_value, '02' AS month_number
UNION ALL
SELECT
m.march_value AS metric_value, '03' AS month_number
) AS monthly_data;
Best Practices¶
Wichtige Szenarien, in denen LEFT OUTER JOIN fehlschlagen kann.¶
Filterverhalten: Wenn das ursprüngliche
CROSS APPLYdazu gedacht war, Zeilen aus der Haupttabelle herauszufiltern, für die es keine Übereinstimmungen in der Unterabfrage gibt, wird einLEFT OUTER JOINdieses Verhalten nicht nachbilden. Stattdessen werden diese Zeilen mitNULL-Werten in den verknüpften Spalten einbezogen, was möglicherweise nicht dem beabsichtigten Ergebnis entspricht.Korrelierte Unterabfragen:
CROSS APPLYist speziell dafür ausgelegt, korrelierte Unterabfragen zu unterstützen, bei denen die Unterabfrage auf Spalten der äußeren Abfrage zugreift. Ein Standard-LEFT OUTER JOINunterstützt dieses Muster nicht auf die gleiche Weise. Der Versuch, ein korreliertesCROSS APPLYin einLEFT OUTERJOINumzuwandeln, kann zu Syntaxfehlern, kartesischen Produkten (duplizierten Zeilen) oder logisch falschen Ergebnissen führen.Differenzen im Resultset: Die Semantik von
CROSS APPLYundLEFT OUTER JOINunterscheidet sich, insbesondere wenn die Unterabfrage keine Zeilen zurückgibt.CROSS APPLYschließt solche Zeilen aus dem Ergebnis aus, währendLEFT OUTER JOINsie inNULL-Werte einfügt.
Empfehlung: Überprüfen und testen Sie stets die Ausgaben von Abfragen, bei denen CROSS APPLY in LEFT OUTER JOIN umgewandelt wurde, um die korrekte Funktionsweise sicherzustellen.
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
SSC-EWI-TS0083¶
Error Message¶
ROLLBACK TRANSACTION requires the appropriate setup to work as intended.
Schweregrad¶
Low
Beschreibung¶
This EWI is generated when a ROLLBACK TRANSACTION statement is encountered, indicating that SnowConvert has successfully transformed the statement into a Snowflake-compatible format. However, the transformation requires manual verification because Snowflake’s transaction rollback behavior differs significantly from SQL Server’s ROLLBACK TRANSACTION functionality.
Beispielcode¶
Input (SQL Server):¶
BEGIN TRANSACTION MyTransaction;
-- Some operations
INSERT INTO Employees (Name, Department) VALUES ('Alice', 'Engineering');
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION MyTransaction; -- Named transaction rollback
END
ELSE
BEGIN
COMMIT TRANSACTION MyTransaction;
END
Output (Snowflake Scripting):¶
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'BeginTransaction' NODE ***/!!!
BEGIN TRANSACTION MyTransaction;
-- Some operations
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "Employees" **
INSERT INTO Employees (Name, Department) VALUES ('Alice', 'Engineering');
IF (:ERROR <> 0) THEN
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0083 - ROLLBACK TRANSACTION REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED. ***/!!!
ROLLBACK TRANSACTION MyTransaction; -- Named transaction rollback
END;
ELSE
BEGIN
COMMIT;
END;
END IF;
END;
Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.