SnowConvert AI - SQL Server-Azure Synapseの機能の違い¶
Applies to
SQL Server
Azure Synapse Analytics
SSC-FDM-TS0001¶
注釈
この FDM は非推奨です。 SSC-EWI-TS0077 ドキュメントをご参照ください。
説明¶
このメッセージは、Snowflakeでサポートされていないcollate句がある場合に表示されます。
コード例¶
入力コード:¶
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でサポートされていないcollate句がある場合に表示されます。
コード例¶
入力コード:¶
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 がカスタム UDF にマッピングされています
説明¶
このメッセージは、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の元の列は、次の表に示すようにマッピングされます。両者は完全には等価でない場合があります。
| 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 コマンドが出力コードに追加された場合に表示されます。これは、SnowSQL WebUI を使って PUT コマンドを実行できないために起こります。このコマンドを正常に実行するためには、ユーザーが事前に 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;
ベストプラクティス¶
SnowCLI をインストールします。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-TS0005¶
TRY_CONVERT/TRY_CAST が TRY_CAST に変換されませんでした
説明¶
この FMD は、TRY_CONVERT または TRY_CAST がSnowflakeで TRY_CAST に変換できなかった場合に追加されます。
Snowflakeの TRY_CAST 関数には、文字式しか変換できないという制限があります。一方、Transactの TRY_CONVERT および TRY_CAST 関数はあらゆるデータ型の式が可能です。
現在、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¶
EXECUTE AS 'user_name' 句はSnowflakeには存在せず、プロシージャを呼び出すユーザーは必要なすべての権限を持っている必要があります。
説明¶
このメッセージは、SnowConvert AI が 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¶
FOR REPLICATION 句はSnowflakeには存在しません。
説明¶
このメッセージは、SnowConvert AI が 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 に置き換えられたために追加されています。警告を追加する理由は、FORMATMESSAGE を置き換えるために使用される FORMATMESSAGE_UDF が、すべての種類の形式は適切に処理できず、特定の条件下でエラーを投げる可能性があるためです。
負として与えられた符号なし数値は、値を変換する代わりに符号を保持します。また、%I64d プレースホルダーは、UDF ではサポートされていないため、使用するとエラーとなります。
FORMATMESSAGE_UDF では、引数の数がプレースホルダの数と異なるとエラーになります。
この UDF は、メッセージ番号 IDs の使用をサポートしていません。
コード例¶
入力コード:¶
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¶
暗号化はSnowflakeではサポートされていません。
説明¶
この警告は、列定義で 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¶
CURRENT_DATABASE 関数は特定のケースで異なる動作をします。
説明¶
この EWI は、関数 DB_NAME を CURRENT_DATABASE に変換するときに追加されます。これは、Snowflakeがdatabase_idパラメーターをサポートしておらず、CURRENT_DATABASE 関数が常に現在のデータベース名を返すためです。
コード例¶
入力コード:¶
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¶
Snowflakeではデフォルト値は使用できません。
注釈
この FDM は非推奨です。 SSC-EWI-TS0078 ドキュメントをご参照ください。
説明¶
このエラーは、関数呼び出し、変数名、名前付き定数などの式がデフォルトオプションに従う場合にコードに追加されます。
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)
;
¶
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-TS0012¶
列の情報が見つかりませんでした。CAST 操作に合わせて STRING が使用されました
説明¶
この EWI は、テーブル値ユーザー定義関数で、変換中に列の戻り値の型が特定できない場合に追加されます。 SELECT ステートメントの CAST 操作に合わせて、デフォルトで STRING が使用されます。<!--TODO: search for a broken reference.->
コード例¶
入力コード:¶
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スクリプトのカーソル行は変更できません。
説明¶
この EWI は、カーソルが入力コードでの変更を受け入れているときに追加されます。Snowflakeスクリプトでは、カーソル行を変更することはできません。
コード例:¶
入力コード:¶
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の同等の列に変換されるときに追加されます。これが追加されるのは、場合により、機能的同等性に影響が出る可能性があるためです。
コード例¶
入力コード:¶
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-TS0016¶
XML Snowflakeの列は形式が異なる可能性があります。
説明¶
この警告は、SQL Server FOR XML 句がSnowflakeの同等のものに変換されるときに追加されます。これは、XML の列が異なる可能性があるために追加されています。
コード例¶
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¶
CURRENT_USER 関数は、パラメーターとしてユーザー ID をサポートしていません。
説明¶
この EWI は、 SUSER_NAME または SUSER_SNAME などの関数にパラメーターとしてユーザー識別子が含まれる場合に追加されます。Snowflakeでは CURRENT_USER 関数でこの最後の1つがサポートされていないためです。
入力コード:¶
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 AI が入力コード内にDBCC ステートメントを見つけた場合に追加されます。\ ほとんどの DBCC ステートメントは、Snowflakeではサポートされていません。
コード例¶
入力コード:¶
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¶
RAISERROR エラーメッセージは、SQL Serverの文字列形式により異なる場合があります。
説明¶
この EWI は、RAISERROR エラーメッセージが SQL Serverの文字列形式により異なる場合があることを通知するために追加されています。
コード例¶
入力コード:¶
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 AI が参照を識別できるようになり、デフォルトの制約がテーブル定義に統合されます。そうしない場合、制約がコメントアウトされるだけです。
コード例¶
入力コード:¶
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
;
既知の問題¶
同じ列に対して異なるデフォルトの制約が宣言されている場合、最初の制約のみがCreate Tableステートメントに反映されます。
デフォルトの制約が欠落列に宣言されている場合、依存関係がないため変換を実行できません。
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-TS0021¶
MASKING POLICY がMASKED WITH の代用で作成されました。
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
この EWI は、Alter Tableステートメントに 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";
注釈
MASKING POLICY は、ALTER TABLE ステートメントの前に作成されます。そして、ほぼ同じ動作をすることが期待されます。ロールとユーザー権限に関して、いくつかの微調整が必要となる可能性があります。
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-TS0022¶
ユーザーは事前にマスキングロールを定義しておく必要があります。
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
この EWI は、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¶
Snowflakeではエラー関数が異なる可能性があります
説明¶
この EWI は、対応する動作の変化のために、以下の ERRORs 関数の変換に追加されます。
ERROR_MESSAGE Snowflakeでは SQLERRM のメッセージが異なる可能性があります。
ERROR_STATE ターゲット SQLSTATE プロパティは、プラットフォームの違いにより、異なる数値を返す可能性があります。
ERROR_PROCEDURE 変換は、関数が呼び出されたストアドプロシージャを返すように変更されました。
入力コード:¶
CREATE PROCEDURE ProcError
AS
BEGIN
Declare @ErrorState INT = ERROR_STATE();
Declare @ErrorMessage INT = ERROR_MESSAGE();
Declare @ErrorProc INT = ERROR_PROCEDURE();
Select 1;
END;
生成されたコード¶
CREATE OR REPLACE PROCEDURE ProcError ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "09/01/2025", "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
ERRORSTATE INT := SQLSTATE /*** SSC-FDM-TS0023 - ERROR STATE COULD BE DIFFERENT IN SNOWFLAKE ***/;
ERRORMESSAGE INT := SQLERRM /*** SSC-FDM-TS0023 - ERROR MESSAGE COULD BE DIFFERENT IN SNOWFLAKE ***/;
ERRORPROC INT := 'ProcError' /*** SSC-FDM-TS0023 - ERROR PROCEDURE NAME COULD BE DIFFERENT IN SNOWFLAKE ***/;
ProcedureResultSet RESULTSET;
BEGIN
ProcedureResultSet := (
Select 1);
RETURN TABLE(ProcedureResultSet);
END;
$$;
推奨¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-TS0024¶
At Time Zoneステートメントの CURRENT_TIMESTAMP は異なる動作をすることがあります。
説明¶
この FDM は、At Time Zone に CURRENT_TIMESTAMP がある場合に追加されます。これは、場合によっては結果が異なる可能性があるためです。
主な違いは、SQL Serverでは、CURRENT_TIMESTAMP がサーバーのタイムゾーンで現在のシステムの日付と時刻を返し、Snowflakeでは、CURRENT_TIMESTAMP が UTC(協定世界時)のタイムゾーンで現在の日付と時刻を返すことです。
入力コード:¶
SQL Server¶
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
結果¶
2024-02-08 16:52:55.317 -10:00
生成されたコード:¶
Snowflake¶
SELECT
CONVERT_TIMEZONE('Pacific/Honolulu', CURRENT_TIMESTAMP() /*** SSC-FDM-TS0024 - CURRENT_TIMESTAMP in At Time Zone statement may have a different behavior in certain cases ***/);
結果¶
2024-02-08 06:53:46.994 -1000
ベストプラクティス¶
これは、Snowflakeで同じ形式を維持したい場合の例です。
SQL Server¶
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
結果¶
2024-02-08 16:33:49.143 -10:00
Snowflakeでは、 ALTER SESSION を使ってデフォルトのタイムゾーンを変更することができます。例:
Snowflake¶
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¶
DB_ID_UDF は、特定のケースで異なる動作をする可能性があります。
説明¶
この FDM は、 DB_ID_UDF が DB_ID SqlServer 関数をできる限りエミュレートしようとしていることを明らかにするために追加されています。SqlServer では、データベースに割り当てられた識別子は一意であり、データベースが削除された場合、この ID は二度と使用されません。これとは別に、Snowflakeでは、この識別子はデータベースが作成されたときに割り当てられた番号に対応します。この番号も一意ですが、連続した番号であるため、このデータベースが削除された場合、この番号は削除されたデータベースの後に作成されたデータベースに割り当てられることになります。
入力コード:¶
SQL Server¶
SELECT DB_ID('my_database');
結果¶
6
生成されたコード:¶
Snowflake¶
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¶
DELETE のケースは仮テーブルでは考慮されません
説明¶
特定の変換を必要とする INSERT ステートメントパターンがあり、これには仮テーブルの作成が必要です。この FDM は、DELETE のケースは考慮されていないことを通知しています。このパターンの詳細については、 INSERT with Table DML Factor with MERGE as DML でご確認ください。
入力コード:¶
SQL Server¶
INSERT INTO T3
SELECT
col1,
col2
FROM (
MERGE T1 USING T2
ON T1.col1 = T2.col1
WHEN NOT MATCHED THEN
INSERT VALUES ( T2.col1, T2.col2 )
WHEN MATCHED THEN
UPDATE SET T1.col2 = t2.col2
OUTPUT
$action ACTION_OUT,
T2.col1,
T2.col2
) AS MERGE_OUT
WHERE ACTION_OUT='UPDATE';
生成されたコード:¶
Snowflake¶
--** SSC-FDM-TS0026 - DELETE CASE IS NOT BEING CONSIDERED, PLEASE CHECK IF THE ORIGINAL MERGE PERFORMS IT **
CREATE OR REPLACE TEMPORARY TABLE MERGE_OUT AS
SELECT
CASE
WHEN T1.$1 IS NULL
THEN 'INSERT'
ELSE 'UPDATE'
END ACTION_OUT,
T2.col1,
T2.col2
FROM
T2
LEFT JOIN
T1
ON T1.col1 = T2.col1;
MERGE INTO T1
USING T2
ON T1.col1 = T2.col1
WHEN NOT MATCHED THEN
INSERT VALUES (T2.col1, T2.col2)
WHEN MATCHED THEN
UPDATE SET
T1.col2 = t2.col2
!!!RESOLVE EWI!!! /*** SSC-EWI-0021 - OUTPUT CLAUSE NOT SUPPORTED IN SNOWFLAKE ***/!!!
OUTPUT
$action ACTION_OUT,
T2.col1,
T2.col2 ;
INSERT INTO T3
SELECT
col1,
col2
FROM
MERGE_OUT
WHERE
ACTION_OUT ='UPDATE';
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-TS0027¶
SET ANSI_NULLS ON ステートメントは、Snowflakeでは異なる動作をする可能性があります。
説明¶
この FDM は、Snowflakeでは SET ANSI_NULLS ON ステートメントが異なる動作をする可能性があることを通知しています。このステートメントについての詳細は、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¶
出力パラメーターは、実行されるコードに現れるのと同じ順序である必要があります。
説明¶
この FDM は、 SP_EXECUTESQL ステートメントの出力パラメーターが、実行する SQL の文字列と同じ順序である必要があることを通知しています。そうしないと、出力値が正しく割り当てられません。
コード例¶
正しい場合¶
ご覧のように @MaxAgeOUT と @MaxIdOUT は、SQL 文字列と出力パラメーターの両方に、同じ順序で現れます。
したがって、コードを変換する際、 SELECT $1, $2 INTO :MAXAGE, :MAXID FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) は正しく値を割り当てます。
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 までメールでお問い合わせください。
SSC-FDM-TS0029¶
SET NOCOUNT ステートメントはコメントアウトされており、Snowflakeでは適用されません。
説明¶
SnowConvert AI は SET NOCOUNT ステートメントに遭遇すると、この FDM を追加します。これは Snowflake 環境には関係がないので、SnowConvert AI はその後に SET NOCOUNT ステートメントをコメントアウトします。
コード例¶
入力コード:¶
SET NOCOUNT ON;
生成されたコード¶
----** SSC-FDM-TS0029 - SET NOCOUNT STATEMENT IS COMMENTED OUT, WHICH IS NOT APPLICABLE IN SNOWFLAKE. **
--SET NOCOUNT ON
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-TS0030¶
SET ANSI_PADDING ON ステートメントはコメントアウトされますが、これはSnowflakeでは同等の動作です。
説明¶
Snowflakeは、文字列値を列に挿入する際、常に後続のスペースを保持します。この動作は、SQL ServerにおけるSET ANSI_PADDING ON に相当します。したがって、SnowConvert AI は SET ANSI_PADDING ON ステートメントに遭遇すると、この FDM を追加して、コメントアウトします。
コード例¶
入力コード:¶
SET ANSI_PADDING ON;
生成されたコード¶
----** SSC-FDM-TS0030 - SET ANSI_PADDING ON STATEMENT IS COMMENTED OUT, WHICH IS EQUIVALENT IN SNOWFLAKE. **
--SET ANSI_PADDING ON
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-TS0031¶
SET ANSI_WARNINGS ON ステートメントはコメントアウトされているので、Snowflakeは通常 ANSI 規格の動作に従います。
説明¶
Snowflakeは通常、特に算術オーバーフロー、ゼロによる除算、文字列の切り捨てのエラー処理に関して、デフォルトで ANSI_WARNINGS が ON であるかのように動作します。Snowflakeでは一般的に、 ANSI_WARNINGS と同等のものを明示的に「設定」する必要はありません。したがって、SnowConvert AI は SET ANSI_WARNINGS ON ステートメントに遭遇すると、この FDM を追加して、コメントアウトします。
コード例¶
入力コード:¶
SET ANSI_WARNINGS ON;
生成されたコード¶
----** SSC-FDM-TS0031 - SET ANSI_WARNINGS ON STATEMENT IS COMMENTED OUT, WHICH SNOWFLAKE GENERALLY ADHERES TO ANSI-STANDARD BEHAVIORS. **
--SET ANSI_WARNINGS ON
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-TS0032¶
IDENTITY 列プロパティは、CREATE TABLE AS STATEMENT ではサポートされておらず、ROW_NUMBER() を使用してエミュレートされています。
説明¶
Snowflakeには、ID列で CREATE TABLE AS を実行する直接的な方法はありません。SnowConvert では、ROW_NUMBER 列を IDENTITY の代わりに追加して、IDの列挙をシミュレートしています。この変換はID列を作成しないので、作成後に挿入された行は自動的にインクリメントされません。
コード例¶
入力コード:¶
with peers as
(
select
*
from (
values
('Luis', 'Miguel'),
('Cory', 'Wong'),
('Steve', 'Vai'),
('John', 'Petrucci'),
('Paul', 'Gilbert')
) as info(name, lastname)
)
select
rowm = IDENTITY(int,1,1),
*
into #MYTABLE
from peers;
生成されたコード¶
--** SSC-FDM-TS0032 - IDENTITY COLUMN PROPERTY NOT SUPPORTED IN CREATE TABLE AS STATEMENT, EMULATED WITH USING ROW_NUMBER **
CREATE OR REPLACE TEMPORARY TABLE T_MYTABLE AS
WITH peers as
(
select
*
from (
values
('Luis', 'Miguel'),
('Cory', 'Wong'),
('Steve', 'Vai'),
('John', 'Petrucci'),
('Paul', 'Gilbert')
) as info (
name,
lastname
)
)
SELECT
ROW_NUMBER()
OVER (
ORDER BY
NULL) AS rowm,
*
from
peers;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-TS0033¶
SET QUOTED_IDENTIFIER STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE.
説明¶
SQL Server Behavior
In SQL Server, SET QUOTED_IDENTIFIER ON is a syntax setting that is separate from collation. The database's or column's collation (e.g., _CI for Case-Insensitive or _CS for Case-Sensitive) dictates whether quoted identifiers are case-sensitive or not. If a database has a _CI collation, then "MyColumn" and "mycolumn" are treated as the same.
Snowflake Behavior
In Snowflake, the behavior is simpler and more strict:
Unquoted Identifiers: Automatically stored and resolved in all uppercase, making them case-insensitive (mytable is the same as MYTABLE).
Quoted Identifiers: By default, identifiers enclosed in double quotes ("MyColumn") are case-sensitive. They are stored exactly as you typed them.
コード例¶
入力コード:¶
SET QUOTED_IDENTIFIER ON
GO
-- the table is defined as "Products Test"
-- this query will work because the case is ignored.
select
*
from [products test];
SET QUOTED_IDENTIFIER OFF
-- this query will fail because the case is preserved
select
*
from [products test];
GO
生成されたコード¶
----** SSC-FDM-TS0033 - SET QUOTED_IDENTIFIER STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE **
--SET QUOTED_IDENTIFIER ON
-- the table is defined as "Products Test"
-- this query will work because the case is ignored.
select
*
from
"products test";
----** SSC-FDM-TS0033 - SET QUOTED_IDENTIFIER STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE **
--SET QUOTED_IDENTIFIER OFF
-- this query will fail because the case is preserved
select
*
from
"products test";
How to Achieve Equivalence in Snowflake
To get the same case-insensitive behavior for quoted identifiers as in SQL Server, you can set the QUOTED_IDENTIFIERS_IGNORE_CASE session parameter to TRUE in Snowflake.
-- This will make quoted identifiers case-insensitive for the session
ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = TRUE;
-- Now, this query will succeed
select
*
from
"products test";
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-FDM-TS0034¶
説明¶
This FDM is generated when a DATA_COMPRESSION clause is encountered in a CREATE TABLE or ALTER TABLE statement. In SQL Server, DATA_COMPRESSION is used to specify whether data should be compressed (using ROW or PAGE compression) to reduce storage space and improve I/O performance. Snowflake automatically handles data compression using its proprietary compression algorithms, making the DATA_COMPRESSION clause unnecessary and unsupported. SnowConvert comments out the DATA_COMPRESSION clause during conversion.
Example Code¶
Input (SQL Server):¶
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
Name NVARCHAR(100),
Department NVARCHAR(50),
Salary DECIMAL(10, 2)
)
WITH (DATA_COMPRESSION = PAGE);
Output (Snowflake):¶
CREATE OR REPLACE TABLE Employees (
EmployeeID INT PRIMARY KEY,
Name NVARCHAR(100),
Department NVARCHAR(50),
Salary DECIMAL(10, 2)
)
WITH (
-- --** SSC-FDM-TS0034 - DATA_COMPRESSION IS AUTOMATICALLY HANDLED BY SNOWFLAKE. **
-- DATA_COMPRESSION = PAGE
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "11/06/2025", "domain": "no-domain-provided", "migrationid": "sFmaAZAnCnm6VvGeJrE4BQ==" }}'
;
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。