SnowConvert: Transact-SQL の機能差¶
Supported Environments
[x] Microsoft SQL Server
[x] Microsoft Azure Synapse Analytics
SSC-FDM-TS0001¶
注釈
この FDM は廃止されました。詳細情報については、 SSC-EWI-TS0077 をご参照ください。
説明¶
このエラーは、Snowflakeがサポートしていない照合順序句を使用しようとしたときに表示されます。
コード例¶
入力コード:¶
SELECT 'a' COLLATE Albanian_BIN;
SELECT 'a' COLLATE Albanian_CI_AI;
CREATE TABLE ExampleTable (
ID INT,
Name VARCHAR(50) COLLATE collateName
);
生成されたコード:¶
SELECT 'a'
-- --** SSC-FDM-TS0001 - COLLATION Albanian_BIN NOT SUPPORTED **
-- COLLATE Albanian_BIN
;
SELECT 'a'
-- --** SSC-FDM-TS0001 - COLLATION Albanian_CI_AI NOT SUPPORTED **
-- COLLATE Albanian_CI_AI
;
CREATE OR REPLACE TABLE ExampleTable (
ID INT,
Name VARCHAR(50)
-- --** SSC-FDM-TS0001 - COLLATION collateName NOT SUPPORTED **
-- COLLATE collateName
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
ベストプラクティス¶
ユーザー側からのアクションは必要ありません。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0002¶
説明¶
このエラーは、Snowflakeがサポートしていない照合順序句を使用した場合に表示されます。
コード例¶
入力コード:¶
SELECT 'a' COLLATE Latin1_General_CI_AS_WS;
生成されたコード:¶
SELECT 'a' COLLATE 'EN-CI-AS' /*** SSC-FDM-TS0002 - COLLATION FOR VALUE WS NOT SUPPORTED ***/;
ベストプラクティス¶
ユーザー側からのアクションは必要ありません。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0003¶
説明¶
このメッセージは、特定の列セットを返す XP_LOGININFO プロシージャを実行したときに表示されます。これらの列の詳細については、 SQL Serverのドキュメントを参照 してください。
account name | type | privilege | mapped login name | permission path |
利用可能なロールを理解するには、Snowflakeの APPLICABLE_ROLES ビューをクエリします。このビューはロール情報を持つ列のセットを提供します。詳細については、 Snowflakeドキュメント をご参照ください。
GRANTEE |
ROLE_NAME |
ROLE_OWNER |
IS_GRANTABLE |
---|
SQL Serverソースの列は、次のテーブルに示すようにSnowflakeの列にマッピングされます。これらのマッピングは厳密には等価ではないことに注意してください。
SQL Server | SnowFlake | |
---|---|---|
account name | GRANTEE | |
type | ROLE_OWNER | |
privilege | ROLE_NAME | |
mapped login name | GRANTEE | |
permission path | NULL |
コード例¶
入力コード:¶
EXEC xp_logininfo
EXEC xp_logininfo 'USERNAME'
生成されたコード:¶
--** SSC-FDM-TS0003 - XP_LOGININFO MAPPED TO CUSTOM UDF XP_LOGININFO_UDF AND MIGHT HAVE DIFFERENT BEHAVIOR **
SELECT
*
FROM
TABLE(XP_LOGININFO_UDF());
--** SSC-FDM-TS0003 - XP_LOGININFO MAPPED TO CUSTOM UDF XP_LOGININFO_UDF AND MIGHT HAVE DIFFERENT BEHAVIOR **
SELECT
*
FROM
TABLE(XP_LOGININFO_UDF('USERNAME'));
ベストプラクティス¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0004¶
説明¶
このメッセージは、 BULK INSERT
操作が変換され、 PUT
コマンドが出力コードに含まれている場合に表示されます。PUT
コマンドは SnowSQL Web UI から実行できないため、ユーザーはこのコマンドを実行する前に、Snowflakeコマンドラインインターフェイス(SnowCLI)をシステムにインストールしておく必要があります。
コード例¶
入力コード:¶
BULK INSERT #temptable FROM 'path/to/file.txt'
WITH
(
FIELDTERMINATOR ='\t',
ROWTERMINATOR ='\n'
);
生成されたコード:¶
CREATE OR REPLACE FILE FORMAT FILE_FORMAT_638466175888203490
FIELD_DELIMITER = '\t'
RECORD_DELIMITER = '\n';
CREATE OR REPLACE STAGE STAGE_638466175888203490
FILE_FORMAT = FILE_FORMAT_638466175888203490;
--** SSC-FDM-TS0004 - PUT STATEMENT IS NOT SUPPORTED ON WEB UI. YOU SHOULD EXECUTE THE CODE THROUGH THE SNOWFLAKE CLI **
PUT file://path/to/file.txt @STAGE_638466175888203490 AUTO_COMPRESS = FALSE;
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "#temptable" **
COPY INTO T_temptable FROM @STAGE_638466175888203490/file.txt;
ベストプラクティス¶
Snowflakeコマンドラインインターフェイス(SnowCLI)をインストールします。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0005¶
説明¶
この機能移行の詳細(FMD)は、ソースデータベースの TRY_CONVERT または TRY_CAST 操作をSnowflakeの TRY_CAST 関数に直接変換できない場合に追加されます。
Snowflakeの TRY_CAST 関数は文字列式のみの変換に限定されていますが、 SQL Serverの TRY_CONVERT
と TRY_CAST
関数はより柔軟で、あらゆるデータ型の式を変換することができます。
Snowflakeの TRY_CAST
関数への変換は、現在のところ文字列式またはその文脈に基づいて文字列として識別できる式に限定されています。
コード例¶
入力コード:¶
SELECT TRY_CAST(14.85 AS INT);
SELECT TRY_CONVERT(VARCHAR, 1234);
SELECT TRY_CONVERT(CHAR, 1);
SELECT TRY_CONVERT(SQL_VARIANT, '2017-01-01 12:00:00');
SELECT TRY_CONVERT(GEOGRAPHY, 'LINESTRING(-122.360 47.656, -122.343 47.656 )');
生成されたコード:¶
SELECT
CAST(14.85 AS INT) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/;
SELECT
TO_VARCHAR(1234);
SELECT
TO_CHAR(1);
SELECT
TO_VARIANT('2017-01-01 12:00:00');
SELECT
TO_GEOGRAPHY('LINESTRING(-122.360 47.656, -122.343 47.656 )');
ベストプラクティス¶
ユーザー側からのアクションは必要ありません。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0006¶
説明¶
このメッセージは、 SnowConvert が「EXECUTE AS 'user_name'
句を含むプロシージャを検出したときに表示されます。Snowflakeはこの機能をサポートしていないため、自動的に EXECUTE AS CALLER
に変換されます。
このパラメーターは、プロシージャの実行方法を制御するセキュリティ権限を定義します。
注釈
句の機能に関する追加情報については、 ドキュメント をご参照ください。
コード例¶
入力コード:¶
CREATE PROCEDURE SelectAllCustomers
WITH EXECUTE AS 'user_name'
AS
BEGIN
SELECT * FROM Customers;
END;
生成されたコード:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "Customers" **
CREATE OR REPLACE PROCEDURE SelectAllCustomers ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
--** SSC-FDM-TS0006 - EXECUTE AS 'user_name' CLAUSE DOES NOT EXIST IN SNOWFLAKE AND THE USER CALLING THE PROCEDURE SHOULD HAVE ALL THE REQUIRED PRIVILEGES **
AS
$$
DECLARE
ProcedureResultSet RESULTSET;
BEGIN
ProcedureResultSet := (
SELECT
*
FROM
Customers);
RETURN TABLE(ProcedureResultSet);
END;
$$;
ベストプラクティス¶
ユーザー側からのアクションは必要ありません。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0007¶
説明¶
このメッセージは、 SnowConvert が FOR REPLICATION
句を含むプロシージャを検出したときに表示されます。Snowflakeはこの機能をサポートしていないため、句は変換時に自動的に削除されます。
このプロシージャは複製専用に設計されており、サブスクライバー側では実行できません。
注釈
この句の関数に関する追加情報については、 ドキュメント をご参照ください。
コード例¶
入力コード:¶
CREATE PROCEDURE SelectAllCustomers
WITH FOR REPLICATION
AS
BEGIN
SELECT * FROM Customers;
END;
生成されたコード:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "Customers" **
CREATE OR REPLACE PROCEDURE SelectAllCustomers ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
--** SSC-FDM-TS0007 - FOR REPLICATION CLAUSE DOES NOT EXIST IN SNOWFLAKE **
AS
$$
DECLARE
ProcedureResultSet RESULTSET;
BEGIN
ProcedureResultSet := (
SELECT
*
FROM
Customers);
RETURN TABLE(ProcedureResultSet);
END;
$$;
ベストプラクティス¶
ユーザー側からのアクションは必要ありません。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0008¶
説明¶
この警告は、 FORMATMESSAGE_UDF
に置き換えられたために FORMATMESSAGE
関数が検出されると表示されます。FORMATMESSAGE_UDF
がすべての形式タイプを正しく扱えるとは限らないため、状況によってはエラーが発生する可能性があることにご注意ください。
負の数値は変換されずに負の符号のまま保持されます。形式指定子 %I64d
は UDFs と互換性がないため、使用するとエラーが発生します。
FORMATMESSAGE_UDF 関数では、引数の数がメッセージテンプレートのプレースホルダーの数と一致しない場合にエラーが発生します。
このユーザー定義関数(UDF)では、メッセージ番号識別子を処理することはできません。
コード例¶
入力コード:¶
SELECT FORMATMESSAGE('Unsigned int %u, %u', 50, -50); -- Unsigned int 50, 4294967246
SELECT FORMATMESSAGE('Unsigned octal %o, %o', 50, -50); -- Unsigned octal 62, 37777777716
SELECT FORMATMESSAGE('Unsigned hexadecimal %X, %x', -11, -50); -- Unsigned hexadecimal FFFFFFF5, ffffffce
SELECT FORMATMESSAGE('Unsigned octal with prefix: %#o', -50); -- Unsigned octal with prefix: 037777777716
SELECT FORMATMESSAGE('Unsigned hexadecimal with prefix: %#X, %x', -11,-50); -- Unsigned hexadecimal with prefix: 0XFFFFFFF5, ffffffce
SELECT FORMATMESSAGE('Bigint %I64d', 3000000000); -- Bigint 3000000000
SELECT FORMATMESSAGE('My message: %s %s %s', 'Hello', 'World'); -- My message: Hello World (null)
生成されたコード:¶
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned int %u, %u', ARRAY_CONSTRUCT(50, -50)); -- Unsigned int 50, 4294967246
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned octal %o, %o', ARRAY_CONSTRUCT(50, -50)); -- Unsigned octal 62, 37777777716
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned hexadecimal %X, %x', ARRAY_CONSTRUCT(-11, -50)); -- Unsigned hexadecimal FFFFFFF5, ffffffce
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned octal with prefix: %#o', ARRAY_CONSTRUCT(-50)); -- Unsigned octal with prefix: 037777777716
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Unsigned hexadecimal with prefix: %#X, %x', ARRAY_CONSTRUCT(-11, -50)); -- Unsigned hexadecimal with prefix: 0XFFFFFFF5, ffffffce
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('Bigint %I64d', ARRAY_CONSTRUCT(3000000000)); -- Bigint 3000000000
SELECT
--** SSC-FDM-TS0008 - FORMATMESSAGE WAS CONVERTED TO CUSTOM UDF FORMATMESSAGE_UDF AND IT MIGHT HAVE A DIFFERENT BEHAVIOR. **
FORMATMESSAGE_UDF('My message: %s %s %s', ARRAY_CONSTRUCT('Hello', 'World')); -- My message: Hello World (null)
ベストプラクティス¶
%I64d
プレースホルダーは、メッセージ内で使用しないでください。最初の引数として、メッセージ ID の代わりに直接文字列メッセージを使います。
プレースホルダーの数がメッセージに続く引数の数と一致していることを確認してください。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0009¶
説明¶
この警告は、列が ENCRYPTED WITH
オプションで定義されている場合に表示されます。Snowflakeは列レベルの暗号化をサポートしていないため、このオプションは変換処理中に削除され、警告メッセージが生成されます。
コード例¶
入力コード:¶
CREATE TABLE [SCHEMA1].[TABLE1] (
[COL1] NVARCHAR(60)
ENCRYPTED WITH (
COLUMN_ENCRYPTION_KEY = MyCEK,
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
)
);
生成されたコード:¶
CREATE OR REPLACE TABLE SCHEMA1.TABLE1 (
COL1 VARCHAR(60)
-- --** SSC-FDM-TS0009 - ENCRYPTED WITH NOT SUPPORTED IN SNOWFLAKE **
-- ENCRYPTED WITH (
-- COLUMN_ENCRYPTION_KEY = MyCEK,
-- ENCRYPTION_TYPE = RANDOMIZED,
-- ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
-- )
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
ベストプラクティス¶
ユーザー側からのアクションは必要ありません。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0010¶
説明¶
この警告は、 SQL Serverの関数 DB_NAME をSnowflakeの関数 CURRENT_DATABASE に変換した場合に表示されます。Snowflakeの CURRENT_DATABASE 関数はパラメーターとしてデータベース IDs をサポートしておらず、現在のデータベースの名前のみを返すため、この変換はコードの動作に影響を与える可能性があります。
コード例¶
入力コード:¶
SELECT DB_NAME(someId);
生成されたコード:¶
SELECT
CURRENT_DATABASE() /*** SSC-FDM-TS0010 - CURRENT_DATABASE function has different behavior in certain cases ***/;
ベストプラクティス¶
ユーザー側からのアクションは必要ありません。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0011¶
注釈
この FDM は現在サポートされていません。詳細情報については、 SSC-EWI-TS0078 をご参照ください。
説明¶
このエラーは、関数呼び出し、変数名、名前付き定数などの式が、switchステートメントのデフォルトの場合の後に置かれたときに発生します。
Snowflakeは、数値や文字列などの明示的な定数値のみを直接入力として受け付けます。
コード例¶
入力コード:¶
ALTER TABLE
T_ALTERTABLETEST
ADD
COLUMN COL10 INTEGER DEFAULT RANDOM(10);
生成されたコード:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "T_ALTERTABLETEST", "RANDOM" **
ALTER TABLE IF EXISTS T_ALTERTABLETEST
ADD
COLUMN COL10 INTEGER
-- --** SSC-FDM-TS0011 - DEFAULT OPTION NOT ALLOWED IN SNOWFLAKE **
-- DEFAULT RANDOM(10)
;
Document headings start at H4, not H1 [myst.header]¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0012¶
説明¶
この警告は、変換中にシステムが列の戻り値のタイプを決定できない場合に、テーブル値ユーザー定義関数に表示されます。このような場合、 SELECT
ステートメントの CAST
操作に一致するデフォルトタイプとして、 STRING
が自動的に使用されます。
コード例¶
入力コード:¶
CREATE FUNCTION GetDepartmentInfo()
RETURNS TABLE
AS
RETURN
(
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
);
生成されたコード:¶
CREATE OR REPLACE FUNCTION GetDepartmentInfo ()
RETURNS TABLE(
DepartmentID STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN DepartmentID WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/,
Name STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN Name WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/,
GroupName STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN GroupName WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
AS
$$
SELECT
CAST(DepartmentID AS STRING),
CAST(Name AS STRING),
CAST(GroupName AS STRING)
FROM
HumanResources.Department
$$;
ベストプラクティス¶
見つからなかったデータ型を確認し、
RETURNS TABLE
ステートメント内で更新します。その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0013¶
説明¶
この警告は、ソースコードに変更可能なコンテナーが含まれている場合に表示されます。Snowflake Scriptingでは、カーソル行は読み取り専用であり、変更することはできません。
コード例:¶
入力コード:¶
CREATE OR ALTER PROCEDURE modifiablecursorTest
AS
BEGIN
-- Should be marked with SSC-FDM-TS0013
DECLARE CursorVar CURSOR
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar2 INSENSITIVE CURSOR
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar3 CURSOR KEYSET SCROLL_LOCKS
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar4 CURSOR DYNAMIC OPTIMISTIC
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar6 CURSOR STATIC
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar7 CURSOR READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
-- Shouid not be marked
DECLARE CursorVar5 CURSOR STATIC READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
RETURN 'DONE';
END;
生成されたコード:¶
CREATE OR REPLACE PROCEDURE modifiablecursorTest ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
-- Should be marked with SSC-FDM-TS0013
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar2 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar3 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar4 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar6 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
--** SSC-FDM-TS0013 - SNOWFLAKE SCRIPTING CURSOR ROWS ARE NOT MODIFIABLE **
CursorVar7 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
-- Shouid not be marked
CursorVar5 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
BEGIN
RETURN 'DONE';
END;
$$;
ベストプラクティス¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0014¶
説明¶
SQL Serverの計算列をSnowflakeに変換するときに警告が表示されます。この警告は、Snowflakeの関数が SQL Serverで使用されていたものとまったく同じではない可能性があることを示しています。
コード例¶
入力コード:¶
CREATE TABLE [TestTable](
[Col1] AS (CONVERT ([REAL], ExpressionValue))
);
生成されたコード:¶
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"}}'
;
ベストプラクティス¶
このメッセージは情報提供のみを目的としています。アクションは必要ありません。
自動変換されなかった式を手動で調整します。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0015¶
説明¶
この警告は、 SQL Server列のデータ型がSnowflakeでサポートされていない場合に表示されます。
コード例¶
入力コード:¶
CREATE TABLE table1
(
column1 type1
);
生成されたコード:¶
CREATE OR REPLACE TABLE table1
(
column1 VARIANT /*** SSC-FDM-TS0015 - DATA TYPE TYPE1 IS NOT SUPPORTED IN SNOWFLAKE ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
ベストプラクティス¶
Snowflakeデータ型のドキュメント を参照して、ニーズに合ったデータ型を見つけてください。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0016¶
説明¶
この警告は、 SQL Server FOR XML 句をSnowflakeに変換するときに表示されます。これは、 XML の出力結果の列順が、2つのプラットフォームで異なる可能性があることを示しています。
コード例¶
以下のような、 employee
というサンプルテーブルがあるとします。
Id |
名前 |
Hint |
---|---|---|
1 |
Kinslee Park |
開発者 |
2 |
Ezra Mata |
開発者 |
3 |
Aliana Quinn |
Manager |
入力コード:¶
SELECT
e.id,
e.name as full_name,
e.hint
FROM
employee e
FOR XML PATH;
<row>
<id>1</id>
<full_name>Kinslee Park</full_name>
<hint>Developer</hint>
</row>
<row>
<id>2</id>
<full_name>Ezra Mata</full_name>
<hint>Developer</hint>
</row>
<row>
<id>3</id>
<full_name>Aliana Quinn</full_name>
<hint>Manager</hint>
</row>
生成されたコード:¶
SELECT
--** SSC-FDM-TS0016 - XML COLUMNS IN SNOWFLAKE MIGHT HAVE A DIFFERENT FORMAT **
FOR_XML_UDF(OBJECT_CONSTRUCT('id', e.id, 'full_name', e.name, 'hint', e.hint), 'row')
FROM
employee e;
<row type="OBJECT">
<full_name type="VARCHAR">Kinslee Park</full_name>
<hint type="VARCHAR">Developer</hint>
<id type="INTEGER">1</id>
</row>
<row type="OBJECT">
<full_name type="VARCHAR">Ezra Mata</full_name>
<hint type="VARCHAR">Developer</hint>
<id type="INTEGER">2</id>
</row>
<row type="OBJECT">
<full_name type="VARCHAR">Aliana Quinn</full_name>
<hint type="VARCHAR">Manager</hint>
<id type="INTEGER">3</id>
</row>
ベストプラクティス¶
これは情報メッセージです。アクションは必要ありません。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0017¶
説明¶
この警告は、 SUSER_NAME
や SUSER_SNAME
などの関数にユーザー識別子パラメーターが含まれている場合に表示されます。Snowflakeの CURRENT_USER 関数はユーザーパラメーターをサポートしていないためです。
入力コード:¶
SELECT SUSER_NAME(0x010500000000000515000000a065cf7e784b9b5fe77c87705a2e0000);
生成されたコード:¶
SELECT
CURRENT_USER() /*** SSC-FDM-TS0017 - User ID parameter used in SUSER_NAME function is not supported in CURRENT_USER function and it was removed. ***/;
ベストプラクティス¶
ユーザー側からのアクションは必要ありません。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0018¶
注釈
この FDM は現在サポートされていません。詳細情報については、 SSC-EWI-TS0079 をご参照ください。
説明¶
この機能移行の詳細(FMD)は、 SnowConvert がソースコード内の DBCC (データベースコンソールコマンド)ステートメントを検出すると表示されます。Snowflakeはほとんどの DBCC ステートメントをサポートしていないことに注意してください。
コード例¶
入力コード:¶
DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS
生成されたコード:¶
----** SSC-FDM-TS0018 - DATABASE CONSOLE COMMAND 'CHECKIDENT' IS NOT SUPPORTED. **
--DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS
推奨事項¶
これは情報メッセージです。アクションは必要ありません。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0019¶
重大性¶
悪い
説明¶
この警告は、 SQL Serverの文字列形式規則により、 RAISERROR エラーメッセージが異なる可能性があることを示しています。
コード例¶
入力コード:¶
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
生成されたコード:¶
CREATE OR REPLACE PROCEDURE RAISERROR_PROCEDURE ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
--** SSC-FDM-TS0019 - RAISERROR ERROR MESSAGE MAY DIFFER BECAUSE OF THE SQL SERVER STRING FORMAT **
SELECT
RAISERROR_UDF('This is a sample error message with the first parameter %d and the second parameter %*.*s',
10,
1, array_construct(
123,
7,
7,
'param2'));
END;
$$;
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0020¶
説明¶
この機能検出マーカー(FDM)は、Alter Tableステートメント内でデフォルト制約が見つかるとトリガーされます。
現在、この制約タイプはサポートされていません。この制限を回避するには、Alter Tableコマンドを使用する前にテーブルを定義する必要があります。この方法は、 SnowConvert 参照の識別に役立ち、デフォルトの制約がテーブル定義に含まれます。このアプローチに従わない場合、制約はコードのコメントとしてのみ表示されます。
コード例¶
入力コード:¶
CREATE TABLE table1(
col1 integer,
col2 varchar collate Latin1_General_CS,
col3 date
);
ALTER TABLE table1
ADD col4 integer,
CONSTRAINT col1_constraint DEFAULT 50 FOR col1,
CONSTRAINT col1_constraint DEFAULT (getdate()) FOR col1;
出力コード:¶
CREATE OR REPLACE TABLE table1 (
col1 INTEGER DEFAULT 50,
col2 VARCHAR COLLATE 'EN-CS',
col3 DATE
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
ALTER TABLE table1
ADD col4 INTEGER;
----** SSC-FDM-TS0020 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION **
--ALTER TABLE table1
--ADD
--CONSTRAINT col1_constraint DEFAULT 50 FOR col1
;
----** SSC-FDM-TS0020 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION **
--ALTER TABLE table1
--ADD
--CONSTRAINT col1_constraint DEFAULT (CURRENT_TIMESTAMP() :: TIMESTAMP) FOR col1
;
既知の問題¶
同じ列に複数のデフォルトの制約が定義されている場合、最初の制約のみがテーブル作成ステートメントに表示されます。
デフォルトの制約が存在しない列を参照すると、必要な列が存在しないため変換に失敗します。
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0021¶
重大性¶
悪い
注釈
読みやすくするために、この例ではコードの一部を簡略化しています。
説明¶
この早期警告インジケーター(EWI)は、テーブルの変更ステートメントに MASKED WITH 句が含まれている場合に表示されます。これは、システムが MASKED WITH 関数に代わる近似値 MASKING POLICY を作成したことを示します。
コード例¶
入力コード:¶
ALTER TABLE table_name
ALTER COLUMN column_name
ADD MASKED WITH (FUNCTION = 'default()');
出力コード:¶
--** SSC-FDM-TS0022 - MASKING ROLE MUST BE DEFINED PREVIOUSLY BY THE USER **
CREATE OR REPLACE MASKING POLICY "default" AS
(val STRING)
RETURNS STRING ->
CASE
WHEN current_role() IN ('YOUR_DEFINED_ROLE_HERE')
THEN val
ELSE 'xxxxx'
END;
ALTER TABLE IF EXISTS table_name MODIFY COLUMN column_name/*** SSC-FDM-TS0021 - A MASKING POLICY WAS CREATED AS SUBSTITUTE FOR MASKED WITH ***/ SET MASKING POLICY "default";
注釈
ALTER TABLE ステートメントを実行する前に、 MASKING POLICY を作成する必要があります。動作がソースシステムとまったく同じでない可能性があり、ロールやユーザー権限を適宜調整する必要が生じる場合があることに注意してください。
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0022¶
重大性¶
悪い
注釈
読みやすくするために、この例ではコードの一部を簡略化しています。
説明¶
このエラーは、 MASKING POLICY が正しく機能するため、データマスキング用に特定のロールや権限を割り当てる必要がある場合に発生します。
コード例¶
入力コード¶
ALTER TABLE tableName
ALTER COLUMN columnName
ADD MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)');
生成されたコード:¶
--** SSC-FDM-TS0022 - MASKING ROLE MUST BE DEFINED PREVIOUSLY BY THE USER **
CREATE OR REPLACE MASKING POLICY "partial_1_xxxxx_1" AS
(val STRING)
RETURNS STRING ->
CASE
WHEN current_role() IN ('YOUR_DEFINED_ROLE_HERE')
THEN val
ELSE LEFT(val, 1) || 'xxxxx' || RIGHT(val, 1)
END;
ALTER TABLE IF EXISTS tableName MODIFY COLUMN columnName/*** SSC-FDM-TS0021 - A MASKING POLICY WAS CREATED AS SUBSTITUTE FOR MASKED WITH ***/ SET MASKING POLICY "partial_1_xxxxx_1";
注釈
6行目では、1つ以上のロール値をコンマ区切りで追加することができます。各ロール値は一重引用符で囲む必要があります。
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0023¶
重大性¶
悪い
説明¶
この警告は、 ERROR_MESSAGE()関数の変換中に表示されます。Snowflakeでは正確なエラーメッセージが異なる場合があるため、ご注意ください。
入力コード:¶
SET @varErrorMessage = ERROR_MESSAGE()
出力コード¶
BEGIN
VARERRORMESSAGE := SQLERRM /*** SSC-FDM-TS0023 - ERROR MESSAGE COULD BE DIFFERENT IN SNOWFLAKE ***/;
END;
推奨¶
さらにサポートが必要な場合は、サポートチーム snowconvert-support@snowflake.com にお問い合わせください。
SSC-FDM-TS0024¶
説明¶
この関数検出メカニズム(FDM)は、 At Time Zone
と CURRENT_TIMESTAMP
を併用した場合にトリガーされます。シナリオによっては結果が異なる場合があるため、この確認は必要です。
SQL ServerとSnowflakeの CURRENT_TIMESTAMP 関数の主な違いは、タイムゾーンの処理です。
SQL Server: サーバーのローカルタイムゾーンに基づくシステム日時を返します。
Snowflake: 日時を UTC (協定世界時)で返します。
入力コード:¶
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() /*** SSC-FDM-TS0024 - CURRENT_TIMESTAMP in At Time Zone statement may have a different behavior in certain cases ***/);
2024-02-08 06:53:46.994 -1000
推奨事項¶
Snowflakeで一貫した形式を維持する方法の例を示します。
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
2024-02-08 16:33:49.143 -10:00
Snowflakeでは、デフォルトのタイムゾーンは ALTER SESSION コマンドを使って変更できます。例:
ALTER SESSION SET TIMEZONE = 'Pacific/Honolulu';
SELECT
CONVERT_TIMEZONE('Pacific/Honolulu', 'UTC', CURRENT_TIMESTAMP());
2024-02-08 16:33:49.143
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0025¶
説明¶
この関数設計メモ(FDM)では、 DB_ID_UDF 関数が DB_ID SQL Server関数の再現動作をどのように目指しているかを説明しています。SQL Serverでは、再利用されることのない永続的な一意の識別子をデータベースに割り当てますが、Snowflakeではデータベース IDs の扱いが異なります。Snowflakeでは、データベース IDs は作成時に割り当てられる連番です。データベースが削除された場合、その ID 番号は利用可能になり、次に新しく作成されるデータベースに割り当てられます。
入力コード:¶
SELECT DB_ID('my_database');
6
出力コード:¶
SELECT
DB_ID_UDF('my_database') /*** SSC-FDM-TS0025 - DB_ID_UDF MAY HAVE A DIFFERENT BEHAVIOR IN CERTAIN CASES ***/;
6
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0026¶
説明¶
テーブル DML 要因を含む INSERT ステートメントを変換する場合には、仮テーブルを作成する必要があります。この機能検出メッセージ(FDM)は、 DELETE 操作がこの変換に含まれないことを示していることに注意してください。このパターンの詳細については、 DML として MERGE でテーブル DML 要因を含む INSERT をご参照ください。
入力コード:¶
INSERT INTO T3
SELECT
col1,
col2
FROM (
MERGE T1 USING T2
ON T1.col1 = T2.col1
WHEN NOT MATCHED THEN
INSERT VALUES ( T2.col1, T2.col2 )
WHEN MATCHED THEN
UPDATE SET T1.col2 = t2.col2
OUTPUT
$action ACTION_OUT,
T2.col1,
T2.col2
) AS MERGE_OUT
WHERE ACTION_OUT='UPDATE';
出力コード:¶
--** SSC-FDM-TS0026 - DELETE CASE IS NOT BEING CONSIDERED, PLEASE CHECK IF THE ORIGINAL MERGE PERFORMS IT **
CREATE OR REPLACE TEMPORARY TABLE MERGE_OUT AS
SELECT
CASE
WHEN T1.$1 IS NULL
THEN 'INSERT'
ELSE 'UPDATE'
END ACTION_OUT,
T2.col1,
T2.col2
FROM
T2
LEFT JOIN
T1
ON T1.col1 = T2.col1;
MERGE INTO T1
USING T2
ON T1.col1 = T2.col1
WHEN NOT MATCHED THEN
INSERT VALUES (T2.col1, T2.col2)
WHEN MATCHED THEN
UPDATE SET
T1.col2 = t2.col2
!!!RESOLVE EWI!!! /*** SSC-EWI-0021 - OUTPUT CLAUSE NOT SUPPORTED IN SNOWFLAKE ***/!!!
OUTPUT
$action ACTION_OUT,
T2.col1,
T2.col2 ;
INSERT INTO T3
SELECT
col1,
col2
FROM
MERGE_OUT
WHERE
ACTION_OUT ='UPDATE';
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0027¶
説明¶
この移行中での検出(FDM)は、 SET ANSI_NULLS ON
ステートメントがSnowflakeではソースデータベースと異なる動作をする可能性があることを警告します。このステートメントの詳細情報については、 ANSI_NULLS ドキュメントをご参照ください。
入力コード¶
SET ANSI_NULLS ON;
出力コード¶
----** SSC-FDM-TS0027 - SET ANSI_NULLS ON STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE **
--SET ANSI_NULLS ON
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-FDM-TS0028¶
説明¶
この通知は、 SP_EXECUTESQL を使用する場合に出力パラメーターは、実行される SQL 文字列内に現れるのと同じ順序でリストされなければならないことを示しています。順序が異なると、出力値が正しく割り当てられません。
コード例¶
正しい場合¶
@MaxAgeOUT
と @MaxIdOUT
パラメーターの順序は、 SQL クエリ文字列と出力パラメーター定義の両方で一致しています。
コードを変換すると、ステートメント SELECT $1, $2 INTO :MAXAGE, :MAXID FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
は、列$1と$2の値をそれぞれ変数 MAXAGE と MAXID に格納します。
Transact¶
CREATE PROCEDURE CORRECT_OUTPUT_PARAMS_ORDER
AS
BEGIN
DECLARE @MaxAge INT;
DECLARE @MaxId INT;
EXECUTE sp_executesql
N'SELECT @MaxAgeOUT = max(AGE), @MaxIdOut = max(ID) FROM PERSONS WHERE ID < @id AND AGE < @age;',
N'@age INT, @id INT, @MaxAgeOUT INT OUTPUT, @MaxIdOUT INT OUTPUT',
30,
100,
@MaxAgeOUT = @MaxAge OUTPUT,
@MaxIdOut = @MaxId OUTPUT;
SELECT @MaxAge, @MaxId;
END
Snowflake¶
CREATE OR REPLACE PROCEDURE CORRECT_OUTPUT_PARAMS_ORDER ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/07/2024" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
MAXAGE INT;
MAXID INT;
ProcedureResultSet RESULTSET;
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE TRANSFORM_SP_EXECUTE_SQL_STRING_UDF('SELECT
MAX(AGE),
MAX(ID) FROM
PERSONS
WHERE
ID < @id AND AGE < @age;', '@age INT, @id INT, @MaxAgeOUT INT OUTPUT, @MaxIdOUT INT OUTPUT', ARRAY_CONSTRUCT('', '', 'MAXAGEOUT', 'MAXIDOUT'), ARRAY_CONSTRUCT(
30,
100, :MAXAGE, :MAXID));
--** SSC-FDM-TS0028 - OUTPUT PARAMETERS MUST HAVE THE SAME ORDER AS THEY APPEAR IN THE EXECUTED CODE **
SELECT
$1,
$2
INTO
:MAXAGE,
:MAXID
FROM
TABLE(RESULT_SCAN(LAST_QUERY_ID()));
ProcedureResultSet := (
SELECT
:MAXAGE,
:MAXID);
RETURN TABLE(ProcedureResultSet);
END;
$$;
共通の問題¶
ストアドプロシージャ定義内の出力パラメーター @MaxAgeOUT
および @MaxIdOUT
の順序は、 SQL クエリ文字列内の順序と異なります。
その結果、コード変換時に、ステートメント SELECT $1, $2 INTO :MAXID, :MAXAGE FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
は予期しない順序で値を割り当てます。Max(AGE)
の値は :MAXID
に割り当てられ、 Max(ID)
の値は、意図したものとは反対の :MAXAGE
に割り当てられます。
この問題は、 SELECT INTO ステートメントの出力パラメーターの順序を調整するか、 SQL 文字列の順序を修正して一致させることで解決できます。
Transact¶
CREATE PROCEDURE INCORRECT_OUTPUT_PARAMS_ORDER
AS
BEGIN
DECLARE @MaxAge INT;
DECLARE @MaxId INT;
EXECUTE sp_executesql
N'SELECT @MaxAgeOUT = max(AGE), @MaxIdOut = max(ID) FROM PERSONS WHERE ID < @id AND AGE < @age;',
N'@age INT, @id INT, @MaxAgeOUT INT OUTPUT, @MaxIdOUT INT OUTPUT',
30,
100,
@MaxIdOut = @MaxId OUTPUT,
@MaxAgeOUT = @MaxAge OUTPUT;
SELECT @MaxAge, @MaxId;
END
Snowflake¶
CREATE OR REPLACE PROCEDURE INCORRECT_OUTPUT_PARAMS_ORDER ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/07/2024" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
MAXAGE INT;
MAXID INT;
ProcedureResultSet RESULTSET;
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE TRANSFORM_SP_EXECUTE_SQL_STRING_UDF('SELECT
MAX(AGE),
MAX(ID) FROM
PERSONS
WHERE
ID < @id AND AGE < @age;', '@age INT, @id INT, @MaxAgeOUT INT OUTPUT, @MaxIdOUT INT OUTPUT', ARRAY_CONSTRUCT('', '', 'MAXIDOUT', 'MAXAGEOUT'), ARRAY_CONSTRUCT(
30,
100, :MAXID, :MAXAGE));
--** SSC-FDM-TS0028 - OUTPUT PARAMETERS MUST HAVE THE SAME ORDER AS THEY APPEAR IN THE EXECUTED CODE **
SELECT
$1,
$2
INTO
:MAXID,
:MAXAGE
FROM
TABLE(RESULT_SCAN(LAST_QUERY_ID()));
ProcedureResultSet := (
SELECT
:MAXAGE,
:MAXID);
RETURN TABLE(ProcedureResultSet);
END;
$$;
推奨事項¶
OUTPUT パラメーターが、 SQL 文字列の出現順と一致していることを確認してください。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください