SnowConvert AI - SQL Server-Azure Synapse - 一般的な言語要素¶
このセクションでは、Transact-SQL の一般的なステートメントに関する情報を確認できます。
COLLATE¶
Applies to
SQL Server
Azure Synapse Analytics
照合の変換は、サポートされる場合とされない場合があり、その値に応じて異なります。
現在、これらの言語が変換のためにサポートされており、照合で見つかった場合、Snowflakeの相当するものに変換されます。
SQL Server |
Snowflake |
|---|---|
Latin1_General |
EN |
Modern_Spanish |
ES |
フランス語 |
FR |
言語が上記以外の場合、照合はコメントされます。
The collate in SQL Server comes with additional specifications, such as CI, CS, AI, and AS. If there are additional specifications that are unsupported, they will be commented in the result.
ソース¶
期待される¶
テーブル作成での照合の例を見てみましょう
ソース¶
期待される¶
ご覧のように、SelectやTable内でのCollateの変換は同じです。
COMPUTED COLUMN¶
計算式を変換できませんでした。
Applies to
SQL Server
Azure Synapse Analytics
説明¶
計算列の式を変換できませんでした。
コード例¶
入力コード:¶
出力コード:¶
推奨事項¶
変換されていない式に手動で変更を加えます。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
関連 EWIs¶
SSC-FDM-TS0014: 計算された列が変換されました。
OUTER APPLY¶
Outerはステートメントの等価変換を適用します。
Applies to
SQL Server
Azure Synapse Analytics
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
OUTER APPLY が指定されると、右側の行セット式がその行に対して空の行セットを返す場合でも、左側の行セットの各行に対して1つの行が生成されます。(OUTER APPLY 定義)
構文¶
Snowflakeの等価性¶
Snowflakeではサポートされていないステートメント OUTER APPLY がありますが、同等のステートメントがあり、それは LATERAL です。したがって、ステートメントの翻訳は、代替ソリューションを使用して同じ機能を取得するために行われます。
とはいえ、Snowflakeの LATERAL ステートメントには2種類の構文があります。実際、この翻訳では INNER JOIN LATERAL のバリエーションが使われています。
Snowflakeの INNER JOIN LATERAL 文法は以下の通りです。
注釈
<inline_view> はテーブル名であってはなりません。
そして、単一の LATERAL ステートメントを以下に示します。
サンプルソース¶
次の例は、OUTER APPLY と INNER JOIN LATERAL の間の一般的な翻訳を示しています。
SQL Server¶
出力¶
p.ProjectName |
e.ProjectName |
FirstName |
|---|---|---|
Project A |
Project A |
John |
Project A |
Project A |
Jane |
Project A |
Project B |
Michael |
Project B |
Project A |
John |
Project B |
Project A |
Jane |
Project B |
Project B |
Michael |
Project C |
Project A |
John |
Project C |
Project A |
Jane |
Project C |
Project B |
Michael |
Snowflake¶
出力¶
PROJECTNAME |
PROJECTNAME_2 |
FIRSTNAME |
|---|---|---|
Project A |
Project A |
John |
Project A |
Project A |
Jane |
Project A |
Project B |
Michael |
Project B |
Project A |
John |
Project B |
Project A |
Jane |
Project B |
Project B |
Michael |
Project C |
Project A |
John |
Project C |
Project A |
Jane |
Project C |
Project B |
Michael |
既知の問題¶
翻訳は入力と等価であるため、いくつかの制限があります。
TOP や WHERE ステートメントが最適な動作になるように見直されることがあります。
ステートメントの最後に相関名を付ける必要があるかもしれません。Snowflakeでは、相関名がクエリにない場合、クエリは問題になりませんが、機能が変更される可能性があり、SQL Serverで受け入れられるパターンの一部にはなりません。
SQL Server¶
翻訳出力¶
サポートされていない特定のステートメントでは、すべてのブロックコードをコメントアウトすることができます(例は、JSON 例) から取得されます)。
SQL Server¶
翻訳出力¶
関連 EWIs¶
関連 EWIs はありません。
USE¶
Transact-SQL USE ステートメントのSnowflakeでの同等の機能。
Applies to
SQL Server
この USE ステートメントは、Snowflakeで同等の機能を持っています。このステートメントは、Snowflakeでは USE DATABASE ステートメントに翻訳されます。
翻訳例¶
ソース¶
出力¶
データベース名¶
USE ステートメントで指定された データベース名 は、角括弧 ([ ]) の中にあると変更される可能性があります。最初の括弧と最後の括弧は 引用符 に置き換えられます。例:
ソース¶
出力¶
ユーザー定義データベース¶
ユーザーが -d パラメーターを使用して、すべてのオブジェクトに適用されるカスタムデータベース名を変換ツールに指定し、USE ステートメントを変換したい場合、データベース名は USE ステートメントにのみ適用され、オブジェクトには適用されません。これはuseステートメントから指定されたデータベースを上書きします。例:
ソース¶
出力¶
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
関連 EWIs はありません。
EXECUTE¶
Applies to
SQL Server
Azure Synapse Analytics
Exec または Execute ステートメントの翻訳はSnowflakeではサポートされていませんが、 CALL ステートメントに翻訳されます。
注釈
わかりやすくするため、出力コードの一部を省略しています。
入力¶
出力¶
Executeの詳細については、 プロシージャ内の実行 をご参照ください。
PRINT¶
Applies to
SQL Server
Azure Synapse Analytics
Print ステートメントはSnowflakeでは直接サポートされていませんが、最も近い等価物である SYSTEM$LOG_INFO 組み込み関数に変換されます。
入力¶
出力( SnowScript 内)¶
出力( SnowScript 外)¶
Print ステートメントをストアドプロシージャの外部で使用する場合は、 SnowConvert AI UDP から呼び出す必要があります。
メッセージのログを開始する前に、イベントテーブルを設定する必要があります。詳細については、 Snowflakeスクリプトでのメッセージのログ をご参照ください。
システムストアドプロシージャ¶
SP_EXECUTESQL¶
システムプロシージャ SP_EXECUTESQL の翻訳仕様。
Applies to
SQL Server
Azure Synapse Analytics
説明¶
SP_EXECUTESQL システムストアドプロシージャは、何度も再利用できるTransact-SQL ステートメントやバッチ、または動的に構築されたステートメントを実行するために使用されます。ステートメントまたはバッチにはパラメーターを埋め込むことができます。
この機能は、 EXECUTE IMMEDIATE ステートメントと埋め込みパラメーター用のユーザー定義関数( UDF )を使用して、Snowflakeでエミュレートできます。
この翻訳に使用されているユーザー定義関数( UDF )の詳細については、 TRANSFORM_SP_EXECUTE_SQL_STRING_UDF(STRING, STRING, ARRAY, ARRAY) をご確認ください。
構文¶
Transact¶
サンプルソースパターン¶
すべてのパターンは、SP_EXECUTESQL をSnowflakeの EXECUTE IMMEDIATE ステートメントに変換し、埋め込みパラメーターを使用する場合に実行する SQL 文字列のみを変更します。
警告
SSC-EWI-0030 (動的 SQL の使用)が全てのパターンに追加されます。SP_EXECUTESQL の翻訳がSnowflakeと同等であっても、この文脈では、この EWI は、SQL の文字列が意図したとおりに翻訳を実行するために手動での修正が必要な場合があることを示しています。
セットアップデータ¶
Transact¶
Snowflake¶
埋め込みパラメーターなし¶
埋め込みパラメーターを使用していない場合は、SP_EXECUTESQL を EXECUTE IMMEDIATE ステートメントに変換し、SQL 文字列をそのまま使用します。
Transact¶
結果¶
名前 |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
ジョン・ドウ |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
Snowflake¶
結果¶
名前 |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
ジョン・ドウ |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
データバインド用の埋め込みパラメーターを含む¶
データバインディング用の埋め込みパラメーターの場合、 SP _EXECUTESQL は EXECUTE IMMEDIATE ステートメントに変換され、 SQL 文字列は TRANSFORM_SP_EXECUTE_SQL_STRING_UDF によって変更されます。
EXECUTE IMMEDIATE の結果は ProcedureResultSet 変数に割り当てられ、後に TABLE(ProcedureResultSet) として返されます。
Transact¶
結果¶
名前 |
ID |
AGE |
|---|---|---|
ジョン・ドウ |
2 |
21 |
Snowflake¶
結果¶
名前 |
ID |
AGE |
|---|---|---|
ジョン・ドウ |
2 |
21 |
埋め込み OUTPUT パラメーターを含む¶
埋め込み OUTPUT パラメーターの場合、SP_EXECUTESQL は EXECUTE IMMEDIATE ステートメントに変換され、SQL 文字列は TRANSFORM_SP_EXECUTE_SQL_STRING_UDF を通して変更されます。
さらに、SELECT $1, ..., $n INTO :outputParam1, ..., :outputParamN FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) が、各列の結果に対応する OUTPUT パラメーターに追加されます。
警告
SELECT INTO ステートメントに SSC-FDM-TS0028 が追加されます。INTO 句のパラメーターは、元の SQL 文字列で割り当てられたのと同じ順序で表示されることが不可欠です。
そうでない場合は、この要件を満たすために手動での変更が必要です。
Transact¶
結果¶
<匿名> |
|---|
32 |
Snowflake¶
結果¶
:MAXAGE::NUMBER(38,0) |
|---|
32 |
埋め込み OUTPUT パラメーターとデータバインドの両方を含む¶
翻訳は OUTPUT パラメーターのみの場合と同じです。
Transact¶
結果¶
<匿名> |
<匿名> |
|---|---|
24 |
4 |
Snowflake¶
結果¶
:MAXAGE::NUMBER(38,0) |
:MAXID::NUMBER(38,0) |
|---|---|
24 |
4 |
パラメーターは定義順ではありません¶
このパターンは、前のパターンと同じルールに従います。TRANSFORM_SP_EXECUTE_SQL_STRING_UDF はパラメーター値を正しい順序で置き換えます。
Transact¶
結果¶
<匿名> |
<匿名> |
|---|---|
24 |
4 |
<匿名> |
<匿名> |
|---|---|
24 |
4 |
Snowflake¶
結果¶
:MAXAGE::NUMBER(38,0) |
:MAXID::NUMBER(38,0) |
|---|---|
24 |
4 |
:MAXAGE::NUMBER(38,0) |
:MAXID::NUMBER(38,0) |
|---|---|
24 |
4 |
直接値の実行¶
This translation also handles the cases where the values are directly assigned instead of using variables.
Transact¶
結果¶
<匿名> |
<匿名> |
|---|---|
24 |
4 |
Snowflake¶
結果¶
:MAXAGE::NUMBER(38,0) |
:MAXID::NUMBER(38,0) |
|---|---|
24 |
4 |
動的に構築される SQL 文字列¶
このパターンは、前のパターンと同じルールに従います。ただし、SQL 文字列が埋め込みパラメーターの有無にかかわらず単純な単一クエリでない場合は、EXECUTE IMMEDIATE ステートメントの結果の割り当てが追加されない可能性があります。
さらに、SELECT ステートメントが実行されようとしていることを SnowConvert AI が正しく識別するためには、 SQL 文字列がリテラル値 'SELECT' で始まる必要があります。
Transact¶
結果¶
名前 |
ID |
AGE |
|---|---|---|
ジョン・ドウ |
2 |
21 |
Snowflake¶
結果¶
名前 |
ID |
AGE |
|---|---|---|
ジョン・ドウ |
2 |
21 |
複数の結果セットを返す¶
Snowflake Scriptingプロシージャでは、1つのプロシージャにつき1つの結果セットしか返すことができません。
Transact-SQL の動作を複製するために、2つ以上の結果セットを返す場合、それらは仮テーブルに格納されます。Snowflake Scriptingプロシージャは、仮テーブルの名前を含む配列を返します。詳しくは、SSC-FDM-0020をご覧ください。
Transact¶
結果¶
名前 |
ID |
AGE |
|---|---|---|
ジョン・ドウ |
2 |
21 |
名前 |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
ジョン・ドウ |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
INSERT FIRST |
1200 |
230 |
Snowflake¶
結果¶
WITH_MULTIPLE_RETURNS |
|---|
[ "RESULTSET_88C35D7A_1E5B_455D_97A4_247806E583A5", "RESULTSET_B2345B61_A015_43CB_BA11_6D3E013EF262" ] |
既知の問題¶
1.無効なコードが検出されました¶
SP_EXECUTESQL は、 SQL 文字列の中で複数の SQL ステートメントを実行できます。Snowflakeは複数の SQL ステートメントの実行もサポートしていますが、 BEGIN ... END ブロックで囲む必要があります。さらに、 BEGIN ... END ブロックから複数のステートメントを実行する場合、 EXECUTE IMMEDIATE は結果セットを返しません。 このような場合の翻訳は、 SnowConvert AI ではまだサポートされていません。 詳しくは、 SSC-EWI-0030 をご確認ください。
したがって、このケースが検出された場合、翻訳されたコードでは、EXECUTE IMMEDIATE は ProcedureResultSet に割り当てられません。
Transact¶
結果¶
名前 |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
ジョン・ドウ |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
INSERT FIRST |
1200 |
230 |
Snowflake¶
結果¶
2.有効または無効なコードが検出されません¶
SQL 文字列が連結によって動的に構築される場合、 SnowConvert AI は実行されようとしているステートメントを検出できないことがあります。したがって、翻訳されたコードでは、 EXECUTE IMMEDIATE は ProcedureResultSet に割り当てられません。
Transact¶
結果¶
名前 |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
ジョン・ドウ |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
INSERT FIRST |
1200 |
230 |
Snowflake¶
結果¶
3.無効なコードを有効なコードと誤認¶
SQL 文字列が SELECT ステートメントで始まり、さらにステートメントが続く場合、 SnowConvert AI はこれを有効なコードとして検出し、 EXECUTE IMMEDIATE の結果を ProcedureResultSet に割り当てようとします。これはコンパイルエラーにつながります。 詳しくは、 SSC-EWI-0030 をご確認ください。
Transact¶
結果¶
名前 |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
ジョン・ドウ |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
名前 |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
ジョン・ドウ |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
Snowflake¶
結果¶
関連 EWIs¶
SSC-EWI-0030: 以下のステートメントには動的 SQL の使用法があります
SSC-FDM-TS0028: 出力パラメーターは実行コードと同じ順序でなければなりません。
SSC-FDM-0020: 仮テーブルに複数の結果セットが返されます。
SP_RENAME¶
Stored Procedure to Rename certain objects in SQL Server
Applies to
SQL Server
Azure Synapse Analytics
SP_RENAME システムストアプロシージャは、特定のシナリオでSnowflakeでエミュレートできます。一般的には、動的ステートメントと ALTER TABLE および元のパラメーターを使用する EXECUTE IMMEDIATE がこれに相当します。
テーブルの翻訳例¶
ソース¶
出力¶
ソース¶
出力¶
列の翻訳例¶
ソース¶
出力¶
ソース¶
出力¶
関連 EWIs¶
SSC-EWI-TS0075: 組み込みプロシージャの翻訳は現在サポートされていません。
WAITFOR DELAY¶
Applies to
SQL Server
Azure Synapse Analytics
説明¶
In SQL Server, WAITFOR DELAY pauses execution for a specified duration. SnowConvert AI transforms WAITFOR DELAY statements to Snowflake's CALL SYSTEM$WAIT() function, which provides equivalent delay functionality.
The time string is parsed and converted to seconds (or milliseconds for sub-second precision). Variables and parameters are passed through directly with an EWI warning, since SYSTEM$WAIT expects a numeric value rather than a time string.
注釈
WAITFOR TIME (which pauses until a specific time of day) has no Snowflake equivalent and remains flagged with SSC-EWI-0073.
翻訳例¶
WAITFOR DELAY with literal time¶
入力コード:¶
Generated Code:¶
WAITFOR DELAY with sub-second precision¶
入力コード:¶
Generated Code:¶
WAITFOR DELAY with variable¶
入力コード:¶
Generated Code:¶
WAITFOR DELAY at script level¶
入力コード:¶
Generated Code:¶
Known Limitations¶
WAITFOR TIME(pause until a specific time of day) has no Snowflake equivalent and is flagged with SSC-EWI-0073.When a variable is used, SSC-EWI-TS0094 is emitted because
SYSTEM$WAITexpects a numeric value but the variable may contain a time string in'HH:MM:SS'format.
関連 EWIs¶
SSC-EWI-TS0094: WAITFOR DELAY variable may contain a time string incompatible with SYSTEM$WAIT.
SSC-EWI-0073: Pending functional equivalence review (emitted for WAITFOR TIME).
CREATE STATISTICS¶
Applies to
SQL Server
Azure Synapse Analytics
説明¶
SnowConvert AI comments out CREATE STATISTICS statements because Snowflake automatically collects optimizer statistics and does not require this statement.
Translation Example¶
入力コード:¶
Generated Code:¶
Additional Example¶
入力コード:¶
Generated Code:¶
Known Limitations¶
Any operational process that explicitly creates or refreshes statistics in SQL Server should be reviewed, because Snowflake manages optimizer statistics automatically.