SnowConvert: Probleme bei SQLServer¶
SSC-EWI-TS0060¶
Schweregrad¶
Medium
Beschreibung¶
Diese Warnung erscheint, wenn eine nicht unterstützte Uhrzeitkomponente als Parameter in einer datumsbezogenen Funktion in Snowflake verwendet wird. Eine vollständige Liste der unterstützten Datums- und Uhrzeitkomponenten finden Sie in der Snowflake-Dokumentation zu Datums- und Uhrzeitfunktionen.
Codebeispiel¶
Eingabecode¶
SELECT
-- Supported
DATEPART(second, getdate()),
-- Not supported
DATEPART(millisecond, getdate()),
DATEPART(microsecond, getdate());
Ausgabecode:¶
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);
Empfehlungen¶
Sie können eine benutzerdefinierte Funktion (User-Defined Function, UDF) erstellen, um manuell Uhrzeitkomponenten zu extrahieren, die nicht direkt von Snowflake unterstützt werden.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-TS0070¶
Das EWI
-Feature ist veraltet. Aktuelle Informationen finden Sie in der Dokumentation zu SSC-FDM-TS0024.
Beschreibung¶
Diese Warnung erscheint, wenn Sie CURRENT_TIMESTAMP mit der AT TIME ZONE-Klausel verwenden. Die Warnung weist darauf hin, dass die Ergebnisse in verschiedenen Szenarien aufgrund der dynamischen Natur von CURRENT_TIMESTAMP inkonsistent sein können.
Der wichtigste Unterschied zwischen Microsoft SQL Server und der Funktion CURRENT_TIMESTAMP von Snowflake ist die Handhabung der Zeitzonen:
SQL Server: Gibt das Systemdatum und die Systemuhrzeit basierend auf der lokalen Zeitzone des Servers zurück
Snowflake: Gibt das Datum und die Uhrzeit als UTC-Zeit (Koordinierte Weltzeit) zurück
¶
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
2024-02-08 16:52:55.317 -10:00
¶
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 ***/!!!);
2024-02-08 06:53:46.994 -1000
Empfehlungen¶
Hier ist ein Beispiel dafür, wie Sie in Snowflake eine einheitliche Formatierung beibehalten können.
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
2024-02-08 16:33:49.143 -10:00
In Snowflake können Sie die Standardzeitzone mit dem Befehl ALTER SESSION ändern. Beispiel:
ALTER SESSION SET TIMEZONE = 'Pacific/Honolulu';
SELECT
CONVERT_TIMEZONE('Pacific/Honolulu', 'UTC', CURRENT_TIMESTAMP());
2024-02-08 16:33:49.143
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-TS0044¶
Schweregrad¶
Kritisch
Teile des Codes wurden weggelassen, um das Beispiel klar und übersichtlich zu halten.
Beschreibung¶
Diese Warnung erscheint bei Verwendung der FOR XML-Klausel, die in Snowflake SQL nicht verfügbar ist.
Codebeispiel¶
Eingabecode:¶
SELECT TOP 1 LastName
FROM AdventureWorks2019.Person.Person
FOR XML AUTO;
Ausgabecode:¶
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;
Empfehlungen¶
Ziehen Sie in Erwägung, benutzerdefinierte Funktionen (UDFs) zu verwenden, um die Funktionalität Ihres Quellcodes zu replizieren. Nachfolgend finden Sie Beispiele von UDFs, die Ihnen helfen können, das ursprüngliche Verhalten zu reproduzieren:
SQL Server
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
-- 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¶
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;
-- 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 zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-TS0035¶
Schweregrad¶
Medium
Teile des Codes wurden entfernt, um das Beispiel übersichtlicher und leichter verständlich zu machen.
Beschreibung¶
Derzeit unterstützt Snowflake keine Cursor-Variablen, die deklariert, aber nicht initialisiert sind. Infolgedessen wurde eine EWI-Meldung (Error, Warning, Information) hinzugefügt, und der entsprechende Code wurde 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;
Ausgabecode:¶
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;
$$;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-TS0001¶
Schweregrad¶
Kritisch
Teile des Ausgabecodes wurden entfernt, um das Beispiel übersichtlicher und leichter nachvollziehbar zu machen.
Beschreibung¶
Diese EWI-Meldung (Error, Warning, Information) erscheint, wenn SnowConvert auf einen kritischen Fehler stößt, der verhindert, dass während der Übersetzung der Funktionsrumpf (Body) erzeugt wird.
Beispielcode¶
SQL Server¶
CREATE FUNCTION func1 ()
RETURNS VARCHAR
SELECT
*
FROM
TABLE1
Snowflake¶
CREATE OR REPLACE FUNCTION func1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0001 - THE BODY WAS NOT GENERATED FOR FUNCTION 'func1' ***/!!!
AS
$$
$$;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-TS0025¶
Schweregrad¶
Niedrig
Erzeugen Sie Prozeduren und Makros in JavaScript, indem Sie entweder das Flag -t JavaScript
oder --PLTargetLanguage JavaScript
zu Ihrem Befehl hinzufügen.
Teile des Ausgabecodes wurden entfernt, um das Beispiel übersichtlicher und leichter nachvollziehbar zu machen.
Beschreibung¶
Diese EWI-Meldung (Error, Warning, Information) erscheint, wenn die integrierte Funktion ERROR_SEVERITY übersetzt wird. Die Funktion gibt den Standardwert 16 zurück, der den häufigsten Schweregrad in SQL Server darstellt. Die generierte benutzerdefinierte Funktion (UDF) sollte diesen Wert abrufen.
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
Ausgabecode:¶
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 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()`);
}
$$;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-TS0074¶
Schweregrad¶
Niedrig
Teile des Codes wurden weggelassen, um das Beispiel klar und übersichtlich zu halten.
Beschreibung¶
Diese Warnung erscheint während der Konvertierung der Funktionen TRY_CAST und TRY_CONVERT. Die Ergebnisse in Snowflake können sich vom Original unterscheiden, da einige Datentypabhängigkeiten nicht aufgelöst werden konnten. Dies geschieht in der Regel, wenn die erforderlichen Abhängigkeiten nicht im Quellcode vorhanden sind.
Eingabecode:¶
SELECT TRY_CONVERT( INT, col1) FROM TABLE1;
SELECT TRY_CAST(COL1 AS FLOAT) FROM TABLE1
Ausgabecode¶
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 technische Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-TS0034¶
Schweregrad¶
Hoch
Beschreibung¶
Diese Warnung erscheint, wenn SnowConvert die Spaltenstruktur für die RETURNS TABLE
-Klausel einer Funktion während der Codekonvertierung nicht automatisch bestimmen kann. Infolgedessen bleibt die RETURNS TABLE
-Klausel im generierten Code leer. Dies geschieht in der Regel, wenn die Spalteninformationen nicht aus dem ursprünglichen Quellcode abgeleitet werden können.
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();
Ausgabecode:¶
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":1, "minor":0},{"attributes":{"component":"transact"}}'
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
$$;
SELECT
*
FROM GetDepartmentInfo() !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'TableValuedFunctionCall' NODE ***/!!!;
Empfehlungen¶
Um dieses Problem zu beheben, stellen Sie sicher, dass Ihr Code Zugriff auf alle erforderlichen Objekte hat. Wenn das Problem weiterhin besteht, nachdem Sie sich vergewissert haben, dass alle erforderlichen Objekte verfügbar sind, kontaktieren Sie uns bitte mit Details zu Ihrem speziellen Anwendungsfall.
Wenn Sie zusätzliche Unterstützung benötigen, senden Sie uns eine E-Mail an snowconvert-support@snowflake.com.
SSC-EWI-TS0041¶
Schweregrad¶
Medium
Beschreibung¶
Diese EWI-Meldung (Error, Warning, Information) gilt für die folgenden XML-Datentypmethoden, die derzeit in Snowflake SQL nicht verfügbar sind:
Value: Die tatsächlichen Daten oder Inhalte, die in einer Variablen oder einem Feld gespeichert sind
Query: Eine Anfrage zum Abrufen bestimmter Informationen aus einer Datenbank
Exist: Um zu überprüfen, ob ein bestimmtes Element oder eine bestimmte Bedingung vorhanden ist
Modify: Zum Ändern oder Aktualisieren vorhandener Daten oder Einstellungen
Nodes: Einzelne Elemente oder Verbindungspunkte innerhalb einer Datenstruktur
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;
Ausgabecode:¶
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;
$$;
Empfehlungen¶
Verwenden Sie benutzerdefinierte Funktionen (UDFs), um die Funktionalität Ihres ursprünglichen Quellcodes zu replizieren.
Eine Anleitung zur Handhabung von XML Datentypen in Snowflake finden Sie in dieser Dokumentation.
Wenn Sie weitere Hilfe benötigen, wenden Sie sich an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-TS0010¶
Teile des Ausgabecodes wurden entfernt, um das Beispiel übersichtlicher und leichter nachvollziehbar zu machen.
Schweregrad¶
Hoch
Beschreibung¶
Dieser Fehler tritt auf, wenn ein allgemeiner Tabellenausdruck (Common Table Expression, CTE) in einer Ansicht nicht korrekt verwendet wird. Ansichten sind schreibgeschützte Darstellungen von Abfragen, die definieren, wie Daten abgerufen und angezeigt werden sollen, und nicht, wie sie geändert werden können.
Codebeispiel¶
Eingabecode:¶
Create View viewName
as
with commonTableExpressionName (
columnName
) as
(
select
1
)
((select
1 as col2)
union
(
select
1 as col3
));
Ausgabecode:¶
!!!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
));
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-TS0024¶
Schweregrad¶
Niedrig
Beschreibung¶
Diese Warnung erscheint, wenn eine BULK INSERT
-Operation innerhalb einer gespeicherten Prozedur nicht erkannt werden kann. Infolgedessen werden die erforderlichen Abhängigkeiten für die vollständige Transformation nicht erstellt. Außerdem versucht der konvertierte Befehl COPY INTO
, Dateien aus einer tempStage
abzurufen, die vom Benutzer 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
Ausgabecode:¶
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 Helpers Code
// END REGION
EXEC(`COPY INTO dbo.table1 FROM @STAGE_638461207064166040/test.txt`);
$$
Empfehlungen¶
Erstellen Sie zunächst eine STAGE und ein FILE FORMAT um auf die Datei zuzugreifen.
Wenn Sie weitere Hilfe benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-TS0075¶
Schweregrad¶
Medium
Beschreibung¶
Die integrierte Übersetzung von Prozeduren ist derzeit nicht verfügbar.
Beispielcode¶
Eingabecode:¶
EXEC sp_column_privileges_rowset_rmt 'Caption';
Ausgabecode:¶
!!!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';
Empfehlungen¶
Von den Benutzern ist keine Aktion erforderlich.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-TS0055¶
Diese EWI-Meldung (Error, Warning, Information) ist nicht mehr in Gebrauch. Bitte beachten Sie die aktualisierten Informationen in SSC-FDM-TS0020.
Schweregrad¶
Medium
Beschreibung¶
Diese Warnung erscheint, wenn eine Standardeinschränkung in einer ALTER TABLE-Anweisung gefunden wird.
Derzeit wird dieser Typ von Einschränkung nicht unterstützt. Es gibt jedoch eine Abhilfe: Wenn die Tabelle vor der ALTER TABLE-Anweisung definiert wird, können wir die Referenzen identifizieren und die Standardeinschränkung mit der Tabellendefinition kombinieren. Wenn dies nicht möglich ist, wird die Einschränkung im konvertierten Code 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;
Ausgabecode:¶
CREATE OR REPLACE TABLE table1 (
col1 INTEGER DEFAULT 50,
col2 VARCHAR COLLATE 'EN-CS',
col3 DATE
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
ALTER TABLE table1
ADD col4 INTEGER,
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;
Wenn alle Anweisungen innerhalb eines ALTER TABLE-Befehls ungültig sind, wird der gesamte ALTER TABLE-Befehl im konvertierten Code auskommentiert.
Bekannte Probleme¶
Wenn mehrere Standardeinschränkungen für dieselbe Spalte definiert sind, wird nur die erste Einschränkung in die CREATE TABLE-Anweisung aufgenommen.
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-TS0061¶
Schweregrad¶
Medium
Teile des Codes wurden entfernt, um das Beispiel übersichtlicher und leichter verständlich zu machen.
Beschreibung¶
Diese Warnung erscheint, wenn eine nicht unterstützte ALTER COLUMN-Anweisung entdeckt wird.
Codebeispiel¶
Eingabecode:¶
ALTER TABLE SampleTable
ALTER COLUMN SampleColumn INT NULL SPARSE;
Ausgabecode:¶
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;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-TS0045¶
Schweregrad¶
Niedrig
Teile der Codeausgabe wurden entfernt, um das Beispiel klar und übersichtlich zu halten.
Beschreibung¶
Dieser Frühwarnindikator (EWI) wird für alle Bezeichnungsnamen generiert, die von GOTO-Anweisungen in SQL Server referenziert 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
Ausgabecode:¶
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;
$$;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
Zugehörige EWI¶
SSC-EWI-0073: Dieser Code muss überprüft werden, um die funktionale Gleichwertigkeit sicherzustellen.
SSC-EWI-TS0009¶
Teile des Ausgabecodes wurden entfernt, um das Beispiel übersichtlicher und leichter nachvollziehbar zu machen.
Schweregrad¶
Hoch
Beschreibung¶
Dieser Fehler weist auf das Vorhandensein von verschachtelten Transaktionen hin, die auftreten, wenn eine neue Transaktion innerhalb einer bestehenden Transaktion in SQL Server gestartet wird. Wenn nach der ersten Anweisung eine weitere BEGIN-Anweisung ausgeführt wird, wird eine neue Transaktion erstellt und der Transaktionszähler um eins erhöht.
Snowflake unterstützt keine verschachtelten Transaktionen. Wenn Sie eine zweite BEGIN-Anweisung verwenden, wird diese ignoriert, und es wird nur eine Transaktion beibehalten. Weitere Einzelheiten zum Verhalten von SQL Server-Transaktionen finden Sie auf der Webseite über SQL Server-Transaktionen.
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;
Ausgabecode:¶
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. CODE '80'. **
--END
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
;
Empfehlungen¶
Snowflake ignoriert verschachtelte Transaktionen, anstatt Kompilierungsfehler zu generieren. Sie können die Bewertungsberichte überprüfen, um verschachtelte Transaktionen in Ihrem Code zu identifizieren.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
Zugehörige EWI¶
SSC-FDM-0020: Ergebnisse von mehreren Abfragen werden in temporären Tabellen gespeichert.
SSC-EWI-0001: Unbekanntes oder ungültiges Token in der Quellcodezeile gefunden.
SSC-EWI-0040: Die Anweisung wird nicht unterstützt
SSC-EWI-TS0039¶
Schweregrad¶
Medium
Beschreibung¶
Diese Warnung erscheint, wenn mehrere SET-Anweisungen für denselben Cursor gefunden werden. In Snowflake Scripting können Sie nur eine SET-Anweisung pro Cursor haben. Alle weiteren SET-Anweisungen für denselben Cursor werden bei der Konvertierung automatisch auskommentiert.
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;
Ausgabecode:¶
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
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT 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 STATEMENT 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;
$$;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-TS0078¶
Schweregrad¶
Medium
Beschreibung¶
Dieser Fehler tritt auf, wenn Ausdrücke wie Funktionsaufrufe, Variablennamen oder benannte Konstanten nach dem Standardfall in einer SWITCH-Anweisung platziert werden.
Snowflake akzeptiert nur explizite konstante Werte, wie Zahlen oder Zeichenfolgen, als Eingabe.
Codebeispiel¶
Eingabecode:¶
ALTER TABLE
T_ALTERTABLETEST
ADD
COLUMN COL10 INTEGER DEFAULT RANDOM(10);
Ausgabecode:¶
--** 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);
¶
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-TS0079¶
Schweregrad¶
Medium
Beschreibung¶
Diese Warnung erscheint, wenn SnowConvert eine DBCC-Anweisung (Database Console Command) in Ihrem Quellcode entdeckt. DBCC-Anweisungen sind Datenbankwartungsbefehle, die normalerweise nicht mit der Architektur von Snowflake kompatibel sind.
Codebeispiel¶
Eingabecode:¶
DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS
Ausgabecode:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0079 - DATABASE CONSOLE COMMAND 'CHECKIDENT' IS NOT SUPPORTED. ***/!!!
DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS;
Empfehlungen¶
Dies ist eine Informationsmeldung, die keine Aktion von Ihnen erfordert.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-TS0049¶
Teile des Codes wurden entfernt, um ihn leichter verständlich zu machen.
Schweregrad¶
Medium
Beschreibung¶
Die meisten IF
-Anweisungen, die einen BEGIN ... END
-Block enthalten, werden unterstützt und erfolgreich ausgeführt, ohne den SSC-EWI-TS0049-Fehler zu generieren.
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
Ausgabecode:¶
--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE PURCHASING.FOO (STATUS INT)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
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;
$$;
Wenn Sie ein einfaches Codebeispiel (wie das oben gezeigte) verwenden, funktioniert die Konvertierung korrekt. In bestimmten Grenzfällen wird die IF-Anweisung jedoch nicht richtig konvertiert, was dazu führt, dass eine EWI-Meldung (Error, Warning, Information) erzeugt wird.
Manuelle Unterstützung¶
Fall 1: Einzelne Anweisung¶
In diesen Szenarien ist die Transformation einfach, da die konvertierte Anweisung Teil einer SELECT-Klausel ist.
IF @result = 0
BEGIN
SET @result =1
END
CASE WHEN (SELECT RESULT FROM CTE2)= 0 THEN
( SELECT 1 AS RESULT )
Fall 2: Mehrere Anweisungen¶
Wenn Sie mehrere SQL-Anweisungen transformieren, konvertieren Sie sie nacheinander. Beginnen Sie mit der ersten Anweisung (N), und verwenden Sie deren Ausgabe als Quelltabelle für die nächste Anweisung (N+1).
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 müssen Sie für jede SET-Anweisung eine eigene Transformation erstellen.
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)
...
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-TS0037¶
Schweregrad¶
Medium
Teile des Codes wurden entfernt, um das Beispiel übersichtlicher und leichter nachvollziehbar zu machen.
Beschreibung¶
Cursor in Snowflake Scripting können sich nur vorwärts durch das Resultset bewegen (nicht scrollbar). Sie können FETCH NEXT nur verwenden, um Datensätze einzeln abzurufen.
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;
Ausgabecode:¶
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;
$$;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-TS0013¶
Diese Warnung ist nicht mehr gültig. Die aktuelle Dokumentation finden Sie unter SSC-FDM-TS0013.
Schweregrad¶
Niedrig
Beschreibung¶
Diese Warnung erscheint, wenn Sie eine berechnete SQL Server-Spalte in Snowflake konvertieren. Sie weist Sie darauf hin, dass die Funktionalität nach der Konvertierung möglicherweise nicht mehr genau dieselbe ist.
Codebeispiel¶
Eingabecode:¶
CREATE TABLE [TestTable](
[Col1] AS (CONVERT ([REAL], ExpressionValue))
);
Ausgabecode:¶
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"}}'
;
Empfehlungen¶
Diese Meldung ist nur zu Ihrer Information. Es besteht kein Handlungsbedarf.
Bitte fügen Sie alle manuellen Änderungen an Ausdrücken hinzu, die nicht automatisch transformiert wurden.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-TS0076¶
Diese Warnmeldung ist nicht mehr in Gebrauch. Die aktuelle Dokumentation finden Sie unter SSC-EWI-0002.
Schweregrad¶
Medium
Beschreibung¶
Standardparameter müssen am Ende der Parameterliste in gespeicherten Snowflake-Prozeduren und Snowflake-Funktionen stehen. Alle Parameter mit Standardwerten sollten an das Ende der Parameterdeklarationssequenz verschoben werden.
Beispielcode¶
Eingabecode:¶
CREATE PROCEDURE MySampleProc
@Param1 NVARCHAR(50) = NULL,
@Param2 NVARCHAR(10),
@Param3 NVARCHAR(10) = NULL,
@Param4 NVARCHAR(10)
AS
SELECT 1;
Ausgabecode:¶
!!!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;
$$;
Empfehlungen¶
Endbenutzer müssen nichts unternehmen.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-TS0056¶
Diese Warnung ist nicht mehr gültig. Die aktuelle Dokumentation finden Sie unter SSC-FDM-TS0021.
Schweregrad¶
Niedrig
Teile des Codes wurden entfernt, um das Beispiel übersichtlicher und leichter verständlich zu machen.
Beschreibung¶
Diese EWI-Meldung (Error, Warning, Information) erscheint, wenn eine ALTER TABLE-Anweisung eine MASKED WITH-Klausel enthält. Sie zeigt an, dass das System eine ungenaue MASKING POLICY erstellt hat, um die Funktion MASKED WITH zu ersetzen.
Codebeispiel¶
Eingabecode:¶
ALTER TABLE table_name
ALTER COLUMN column_name
ADD MASKED WITH (FUNCTION = 'default()');
Ausgabecode:¶
!!!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";
Bevor Sie die ALTER TABLE-Anweisung ausführen, müssen Sie eine MASKING POLICY erstellen. Bitte beachten Sie, dass das Verhalten der Richtlinie ungenau sein kann und möglicherweise Anpassungen an Rollen und Benutzerberechtigungen erfordert.
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-TS0023¶
Schweregrad¶
Niedrig
Teile der Codeausgabe wurden entfernt, um das Beispiel klar und übersichtlich zu halten.
Beschreibung¶
Diese Warnung erscheint, wenn eine BULK INSERT
-Option nicht konvertiert werden kann. Die entsprechenden Optionen sollten in Snowflake als FILE FORMAT
-Optionen angegeben werden.
Codebeispiel¶
Eingabecode:¶
BULK INSERT #PCE FROM 'E:\PCE_Look-up_table.txt'
WITH
(
FIELDTERMINATOR ='\t',
ROWTERMINATOR ='\n',
FIRE_TRIGGERS
);
Ausgabecode:¶
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;
Empfehlungen¶
Besuchen Sie das Benutzerhandbuch zur SnowSQL-Befehlszeilenschnittstelle (CLI).
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
Zugehörige EWI¶
SSC-FDM-TS0004: Die PUT-Anweisung kann nicht über die Benutzeroberfläche ausgeführt werden.
SSC-EWI-TS0072¶
Schweregrad¶
Niedrig
Teile des Ausgabecodes wurden entfernt, um das Beispiel übersichtlicher und leichter nachvollziehbar zu machen.
Beschreibung¶
Diese Warnung erscheint, wenn sowohl SELECT-Anweisungen als auch OUTPUT-Parameter zurückgegeben werden müssen. In solchen Fällen haben die Ergebnisse der SELECT-Anweisungen Vorrang vor den OUTPUT-Parametern.
Eingabecode:¶
CREATE PROCEDURE SOMEPROC(@product_count INT OUTPUT, @123 INT OUTPUT)
AS
BEGIN
SELECT * from AdventureWorks.HumanResources.Department;
SELECT * from AdventureWorks.HumanResources.Employee;
END
Ausgabecode:¶
CREATE OR REPLACE PROCEDURE SOMEPROC (PRODUCT_COUNT INT, _123 INT)
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;
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;
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0072 - RETURN statement will be ignored due to previous RETURN statement ***/!!!
RETURN OBJECT_CONSTRUCT('PRODUCT_COUNT', :PRODUCT_COUNT, '_123', :_123);
END;
$$;
Empfehlungen¶
Löschen Sie alle RETURN-Anweisungen, die ignoriert werden sollen.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
Zugehörige EWI¶
SSC-FDM-0020: Wenn mehrere Resultsets zurückgegeben werden, werden sie in temporären Tabellen gespeichert.
SSC-EWI-TS0046¶
Schweregrad¶
Medium
Beschreibung¶
Diese Warnung erscheint, wenn der Code SQL Server-Systemtabellen referenziert, die entweder keine Snowflake SQL-Entsprechung haben oder in Snowflake nicht unterstützt werden.
Codebeispiel¶
Eingabecode:¶
SELECT *
FROM
sys.all_sql_modules
WHERE
[STATE] = 0; -- state must be ONLINE
Ausgabecode:¶
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
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-TS0017¶
Schweregrad¶
Niedrig
Beschreibung¶
Diese Warnung erscheint, wenn SnowConvert eine maskierte Spalte innerhalb einer CREATE TABLE
-Anweisung entdeckt. In Snowflake kann die Spaltenmaskierung nicht einfach durch das Hinzufügen einer Option in der Spaltendefinition implementiert werden. Um die gleiche Datenmaskierungsfunktionalität wie SQL Server zu erreichen, müssen Sie die Maskierungslogik manuell implementieren.
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
);
Ausgabecode:¶
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"}}'
;
Empfehlungen¶
SnowConvert unterstützt derzeit nicht die automatische Generierung von MASKING POLICIES
. Sie müssen diese Richtlinien manuell erstellen.
Erstellen Sie zunächst eine Rolle, die für die Verwaltung der Maskierungsrichtlinien verantwortlich sein wird.
create role masking_admin;
Als Nächstes erteilen Sie der neu erstellten Rolle die erforderlichen Berechtigungen.
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;
Erstellen Sie im nächsten Schritt die Funktionen der Maskierungsrichtlinie.
-- 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;
Zur Veranschaulichung der Maskierungsfunktionen zeigen wir Beispiele für SQL Server-Maskierungsfunktionen und ihre entsprechenden Implementierungen in Snowflake.
Wenden Sie die Maskierungsrichtlinie auf die Spalte an, für die zuvor die Maskierung in SQL Server aktiviert war.
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 Hilfe benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-TS0057¶
Diese EWI-Meldung (Error, Warning, Information) ist veraltet. Aktuelle Informationen entnehmen Sie bitte der Dokumentation zu SSC-FDM-TS0022.
Schweregrad¶
Niedrig
Teile des Codes wurden entfernt, um das Beispiel übersichtlicher und leichter verständlich zu machen.
Beschreibung¶
Dieser Fehler tritt auf, wenn eine MASKING POLICY eine Rolle oder eine Berechtigung benötigt, um korrekt zu funktionieren. Ohne die richtigen Berechtigungen wird die Datenmaskierung nicht funktionieren.
Codebeispiel¶
Eingabecode¶
ALTER TABLE tableName
ALTER COLUMN columnName
ADD MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)');
Ausgabecode:¶
!!!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";
Wie in Zeile 6 gezeigt, können Sie einen oder mehrere Rollenwerte in den Platzhalter einfügen und diese mit Kommas trennen. Denken Sie daran, dass jeder Rollenwert in einfache Anführungszeichen gesetzt werden muss.
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-TS0063¶
Schweregrad¶
Kritisch
Beschreibung¶
Diese Warnung erscheint, wenn der Code Zeitzonen enthält, die von Snowflake nicht unterstützt werden.
Codebeispiel¶
Eingabecode:¶
SELECT current_timestamp at time zone 'Turks And Caicos Standard Time';
Ausgabecode:¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0063 - TIME ZONE NOT SUPPORTED IN SNOWFLAKE ***/!!!
CURRENT_TIMESTAMP() at time zone 'Turks And Caicos Standard Time'
;
Empfehlungen¶
Sie können eine benutzerdefinierte Funktion erstellen, um verschiedene Zeitzonen zu behandeln.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-TS0032¶
Die EWI (External Web Interface) wird ausschließlich bei der Übersetzung gespeicherter Prozeduren in JavaScript erzeugt. Dieses Feature wird jedoch nicht mehr empfohlen, da Snowflake Scripting jetzt die bevorzugte Sprache für gespeicherte Prozeduren ist.
Schweregrad¶
Hoch
Erzeugen Sie Prozeduren und Makros in JavaScript, indem Sie entweder das Flag -t JavaScript
oder --PLTargetLanguage JavaScript
zu Ihrem Befehl hinzufügen.
Teile der Codeausgabe wurden entfernt, um das Beispiel übersichtlicher zu gestalten.
Beschreibung¶
Diese Warnung erscheint, wenn Sie ein verkettetes Literal konvertieren, das eine BULK INSERT
-Anweisung enthält. Der Konvertierungsprozess übersetzt BULK INSERT
in einen Snowflake-PUT
-Befehl. Dieser PUT
-Befehl kann jedoch nicht ausgeführt werden, wenn er aus dynamischem SQL stammt.
Um BULK INSERT
-Anweisungen korrekt zu behandeln, müssen Sie den PUT
-Befehl getrennt von der Prozedur ausführen. Wenn Ihre Prozedur mehrere BULK INSERT
-Anweisungen in dynamischem SQL enthält, ist es empfehlenswert, dies zu tun:
Teilen Sie die Prozedur in kleinere Teile auf
Führen Sie den entsprechenden
PUT
-Befehl für jedeBULK INSERT
-Anweisung manuell aus.
Dieser Ansatz gewährleistet das ordnungsgemäße Laden von Dateien und Einfügen von Daten.
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;
Ausgabecode:¶
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 Helpers Code section is omitted.
/*** SSC-EWI-0040 - THE STATEMENT 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_638461213351333410;
CREATE OR REPLACE STAGE STAGE_638461213351333410
FILE_FORMAT = FILE_FORMAT_638461213351333410;
PUT file://${IMPORTNAME} @STAGE_638461213351333410 AUTO_COMPRESS = FALSE;
COPY INTO ${SOURCEAFFILIATES} FROM @STAGE_638461213351333410/${IMPORTNAME}`;
EXEC(`${SQLSTRING}`);
$$;
Empfehlungen¶
Extrahieren Sie den von der dynamischen
BULK INSERT
-Anweisung generiertenPUT
-Befehl, und führen Sie ihn aus, bevor Sie die Prozedur ausführen.Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-TS0073¶
Dieser Frühwarnindikator wird nicht mehr unterstützt. Die aktuelle Dokumentation finden Sie unter SSC-FDM-TS0023.
Schweregrad¶
Niedrig
Beschreibung¶
Diese Warnung erscheint während der Transformation der Funktion ERROR_MESSAGE(). Bitte beachten Sie, dass die genaue Fehlermeldung in Snowflake abweichen kann.
Eingabecode:¶
SET @varErrorMessage = ERROR_MESSAGE()
Ausgabecode¶
BEGIN
VARERRORMESSAGE := SQLERRM !!!RESOLVE EWI!!! /*** SSC-EWI-TS0073 - ERROR MESSAGE COULD BE DIFFERENT IN SNOWFLAKE ***/!!!;
END;
Empfehlung¶
Wenn Sie Hilfe benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-TS0080¶
Schweregrad¶
Hoch
Beschreibung¶
Der SQL Server-Befehl EXECUTE AS
ermöglicht es Benutzern, ihren Ausführungskontext vorübergehend zu wechseln. Diese Änderung wirkt sich sowohl auf ihre Berechtigungen zur Ausführung als auch auf die Ausgabe von kontextabhängigen Funktionen wie USER_NAME()
aus. Um zum ursprünglichen Kontext zurückzukehren, können Benutzer den Befehl REVERT
verwenden, nachdem sie ihre Operationen abgeschlossen haben.
Prozeduren in Snowflake benötigen einen Ausführungskontext, der nur während der Erstellung oder Änderung einer Prozedur mit den Anweisungen CREATE PROCEDURE
oder ALTER PROCEDURE
festgelegt werden kann. Sie können diesen Kontext nicht ändern, während die Prozedur läuft.
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;
$$;
Empfehlungen¶
Ändern Sie den Code so, dass er ohne Kontextwechsel funktioniert.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com
SSC-EWI-TS0047¶
Diese Warnung ist nicht mehr gültig. Die aktuelle Dokumentation finden Sie unter SSC-FDM-TS0019.
Schweregrad¶
Niedrig
Beschreibung¶
Diese Warnung weist darauf hin, dass die RAISERROR-Fehlermeldung aufgrund der Zeichenfolgen-Formatierungsregeln von SQL Server unterschiedlich ausfallen kann.
Codebeispiel¶
Eingabecode:¶
CREATE PROCEDURE RAISERROR_PROCEDURE
AS
BEGIN
RAISERROR ('This is a sample error message with the first parameter %d and the second parameter %*.*s',
10,
1,
123,
7,
7,
'param2');
END
Ausgabecode:¶
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;
$$;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-TS0016¶
Teile des Codes wurden entfernt, um das Beispiel übersichtlicher und leichter nachvollziehbar zu machen.
Beschreibung¶
Diese Warnung erscheint, wenn SnowConvert eine ODBC-Skalarfunktion in Ihrem Quellcode entdeckt. Bitte beachten Sie, dass ODBC-Skalarfunktionen in Snowflake nicht in benutzerdefinierte Funktionen konvertiert werden können.
Codebeispiel¶
Eingabecode:¶
SELECT {fn CURRENT_DATE_UDF()};
Ausgabecode:¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'CURRENT_DATE_UDF' NODE ***/!!!
CURRENT_DATE_UDF() !!!RESOLVE EWI!!! /*** SSC-EWI-TS0016 - USER DEFINED FUNCTIONS ARE NOT SUPPORTED IN ODBC SCALAR FUNCTION. ***/!!!;
Zugehörige EWI¶
SSC-EWI-0073: Eine Überprüfung der funktionalen Gleichwertigkeit ist erforderlich.
Empfehlungen¶
Dies ist nur zu Ihrer Information. Es besteht kein Handlungsbedarf.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-TS0036¶
Schweregrad¶
Medium
Teile des Codes wurden weggelassen, um das Beispiel klar und übersichtlich zu halten.
Beschreibung¶
Diese Warnung erscheint, wenn der Code Cursor-Typen enthält, die keine lokalen Cursor sind. Da Snowflake Scripting derzeit nur lokale Cursor unterstützt, werden alle Cursor-Typen bei der Übersetzung automatisch in lokale Cursor konvertiert.
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;
$$;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-TS0067¶
Schweregrad¶
Kritisch
Teile der Codeausgabe wurden entfernt, um das Beispiel klar und übersichtlich zu halten.
Beschreibung¶
Diese Warnung erscheint, wenn OPENXML ungültige Parameter enthält, insbesondere wenn auf den angegebenen XML-Pfad nicht zugegriffen werden kann.
Um diese EWI-Meldung (Error, Warning, Information) aufzulösen, müssen Sie den vollständigen Knotenpfad in den Parametern angeben.
Eingabecode:¶
SELECT
*
FROM
OPENXML (@idoc, @path, 1) WITH (
CustomerID VARCHAR(10),
ContactName VARCHAR(20)
);
Ausgabecode:¶
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)
);
Ausgabecode (expliziter Parameter)¶
SELECT
Left(value:Customer['@CustomerID'], '10') AS 'CustomerID',
Left(value:Customer['@ContactName'], '20') AS 'ContactName'
FROM
OPENXML_UDF($idoc, ':ROOT:Customer');
Empfehlungen¶
Prüfen Sie, ob Sie den Pfad direkt als Parameter in Ihrem Code übergeben können.
Wenn Sie weitere Hilfe benötigen, wenden Sie sich an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-TS0043¶
Schweregrad¶
Medium
Teile der Codeausgabe wurden entfernt, um das Beispiel klar und übersichtlich zu halten.
Beschreibung¶
Diese Warnung erscheint für die WITH XMLNAMESPACES-Klausel, die in Snowflake SQL nicht verfügbar ist.
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
Ausgabecode:¶
--** 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 /*** SSC-FDM-TS0015 - DATA TYPE NS1 IS NOT SUPPORTED IN SNOWFLAKE ***/)
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;
Empfehlungen¶
Ziehen Sie in Erwägung, benutzerdefinierte Funktionen (UDFs) zu verwenden, um die Funktionalität Ihres Quellcodes zu replizieren. Unten finden Sie Beispiele für UDFs, die Ihnen helfen können, das ursprüngliche Verhalten wiederherzustellen:
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
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 zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
Zugehörige EWI¶
SSC-PRF-TS0001: Leistungswarnung – Der Code enthält einen allgemeinen Tabellenausdruck (Common Table Expression, CTE), der möglicherweise rekursiv ist. Überprüfen Sie, ob Sie das Schlüsselwort RECURSIVE hinzufügen müssen.
SSC-EWI-TS0044: Die FOR XML-Klausel kann in Snowflake nicht verwendet werden, da sie nicht unterstützt wird.
SSC-FDM-TS0015: Bitte beachten Sie, dass die Regexp_Substr-Funktion in Snowflake nur mit regulären POSIX-Ausdrücken funktioniert.
SSC-EWI-TS0077¶
Schweregrad¶
Niedrig
Beschreibung¶
Dieser Fehler tritt auf, wenn Sie eine Sortierungsklausel verwenden, die Snowflake nicht unterstützt.
Codebeispiel¶
Eingabecode:¶
SELECT 'a' COLLATE Albanian_BIN;
SELECT 'a' COLLATE Albanian_CI_AI;
CREATE TABLE ExampleTable (
ID INT,
Name VARCHAR(50) COLLATE collateName
);
Ausgabecode:¶
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"}}'
;
Empfehlungen¶
Sie müssen nichts unternehmen.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-TS0026¶
Schweregrad¶
Niedrig
Beschreibung¶
Diese Warnung erscheint, wenn ein allgemeiner Tabellenausdruck (Common Table Expression, CTE), der eine DELETE FROM-Anweisung enthält, in eine CREATE OR REPLACE TABLE-Anweisung konvertiert 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
Ausgabecode:¶
!!!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;
Empfehlungen¶
Sie müssen nichts unternehmen.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com