SnowConvert AI - SQL Server-Azure Synapse - CREATE PROCEDURE (Snowflakeスクリプト)¶
BEGIN および COMMIT トランザクション¶
Transact-SQL BEGIN および COMMIT トランザクションをSnowflake SQL に変換するための翻訳リファレンス
Applies to
SQL Server
Azure Synapse Analytics
説明¶
Snowflake SQL、BEGIN ステートメントを実行することで、トランザクションを明示的に開始することができます。Snowflakeは、同義語 BEGIN WORK と BEGIN TRANSACTION をサポートしています。Snowflakeは BEGIN TRANSACTION の使用を推奨します。
A transaction can be ended explicitly by executing COMMIT. For more information, see the Snowflake Transactions documentation.
サンプルソースパターン¶
以下の例では、BEGIN および COMMIT のトランザクションステートメントについて詳しく説明します。
Transact-SQL¶
BEGIN/COMMIT TRANSACTION¶
ラベル付きトランザクションの開始/コミット¶
Snowflake SQL¶
BEGIN/COMMIT¶
ラベル付き BEGIN/COMMIT トランザクション¶
既知の問題¶
ネストされたトランザクションはSnowflakeではサポートされていません。詳しくは以下のドキュメントをご覧ください: https://docs.snowflake.com/en/sql-reference/transactions
CALL¶
CALL ステートメントの翻訳リファレンス
Applies to
SQL Server
Azure Synapse Analytics
説明¶
The CALL statement is not supported in Snowflake Scripting since this is part of the ODBC API and not a SQL statement, therefore this statement is not translated.
CASE¶
Transact-SQL ケース式をSnowflakeスクリプトに変換するための翻訳リファレンス
Applies to
SQL Server
Azure Synapse Analytics
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
Transact-SQL には、ケース式の形式が2つあります。どちらも式を評価し、条件付きで結果を取得するために使用されます。最初のものは、input_expressionがwhen_expressionの1つ以上に一致するかどうかを評価する単純なケース式を参照します。2番目は、各Boolean_expressionを個別に評価します。else句はどちらの形式でもサポートされています。
Transact-SQL ケースの公式ドキュメントによると:
CASE は、有効な式を使用できるステートメントや句で使用できます。例えば、SELECT、UPDATE、DELETE、SET などのステートメントや、select_list、IN、WHERE、ORDER BY、HAVING などの句で、CASE を使用することができます。
For more information, see the Transact-SQL CASE documentation.
注意:Transact-SQL では、オプションでinput_expressionとboolean_expressionを括弧でカプセル化できます。Snowflake Scriptingでも同様です。
サンプルソースパターン¶
次の例では、ケース式を使用できる2つのシナリオと、Snowflake Scriptingとの違いについて詳しく説明します。
ケースを使用した選択¶
Transact-SQL¶
単純 CASE¶
検索 CASE¶
結果¶
sqlLOGINID |
ステータス |
|---|---|
adventure-works\ken0 |
SINGLE |
adventure-works\ erri0 |
SINGLE |
adventure-works\roberto0 |
MARIED |
adventure-works\rob0 |
SINGLE |
adventure-works\gail0 |
MARIED |
adventure-works\jossef0 |
MARIED |
adventure-works\dylan0 |
MARIED |
adventure-works\diane1 |
SINGLE |
adventure-works\gigi0 |
MARIED |
adventure-works\michael6 |
MARIED |
Snowflakeスクリプト¶
このシナリオでは、ケース式自体に違いはないことに注意してください。
警告
The declaration and assignment of the res variable is to demonstrate the functional equivalence between both languages. It does not appear in the actual output.
単純 CASE¶
検索 CASE¶
結果¶
LOGINID |
STATUS |
|---|---|
adventure-worksken0 |
SINGLE |
adventure-works erri0 |
SINGLE |
adventure-worksoberto0 |
MARIED |
adventure-worksob0 |
SINGLE |
adventure-worksgail0 |
MARIED |
adventure-worksjossef0 |
MARIED |
adventure-worksdylan0 |
MARIED |
adventure-worksdiane1 |
SINGLE |
adventure-worksgigi0 |
MARIED |
adventure-worksmichael6 |
MARIED |
ケースを使用したセット¶
AdventureWorks2019 データベースを両言語で使用し、同じ結果を得ました。
Transact-SQL¶
単純なケース¶
検索されたケース¶
結果¶
結果 |
|---|
150 |
Snowflakeスクリプト¶
警告
Snowflake Scripting does not allow setting a case expression directly to a variable. Both Transact-SQL Case expression formats translate to the following grammar in Snowflake Scripting.
SimpleCase¶
検索されたケース¶
結果¶
結果 |
|---|
150 |
関連 EWIs¶
SSC-EWI-0073: 機能同等性レビュー保留中。
CREATE PROCEDURE¶
Transact-SQL CREATE PROCEDURE 句をSnowflakeに変換するための翻訳リファレンス
Applies to
SQL Server
Azure Synapse Analytics
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
プロシージャの作成ステートメントを使用すると、次の機能を備えたストアドプロシージャを作成できます。
入力パラメーターを受け取り、複数の値を出力パラメーターとして呼び出しプロシージャまたはバッチに返します。
他のプロシージャの呼び出しを含む、データベース内で操作を実行するプログラミングステートメントが含まれます。
成功または失敗(および失敗の理由)を示すステータス値を呼び出しプロシージャまたはバッチに返します。
For more information, see the Transact-SQL CREATE PROCEDURE documentation.
サンプルソースパターン¶
本文のないストアドプロシージャ¶
A stored procedure without a body is an unusual scenario that is allowed in Transact-SQL. Snowflake Scripting does not allow defining procedures without a body, but the following example shows the equivalence.
Transact-SQL¶
プロシージャ¶
Snowflakeスクリプト¶
基本ストアドプロシージャ¶
次の例は、AdventureWorks2019 データベースに新しいプライバシー部門を追加する単純なストアドプロシージャの詳細です。
Transact-SQL¶
Snowflakeスクリプト¶
プロシージャの変更¶
ALTER プロシージャの変換は、基本プロシージャと同等です。
Transact-SQL¶
Snowflakeスクリプト¶
パラメーターの使用¶
パラメーターを使用してロジックを推進したり、ストアドプロシージャ内で動的な SQL ステートメントを構築したりすることができます。次の例では、呼び出し元から送られた引数に基づいて新しい商品価格をセットする、単純な SetNewPrice ストアドプロシージャが構築されています。
Transact-SQL¶
Snowflakeスクリプト¶
出力パラメーター¶
Transact-SQL 出力キーワードは、パラメーターが出力パラメーターであることを示し、その値はストアドプロシージャ呼び出し元に返されます。たとえば、以下のプロシージャは、特定の従業員の休暇時間数を返します。
Transact-SQL¶
Snowflakeスクリプト¶
オプションのパラメーター¶
パラメーターの宣言時にデフォルト値が指定されている場合、そのパラメーターはオプションとみなされます。プロシージャ呼び出しのオプションパラメーターに値を提供する必要はありません。
Transact-SQL¶
Snowflakeスクリプト¶
EXECUTE AS¶
Transact-SQL の EXECUTE AS 句は、ストアドプロシージャの実行コンテキストを定義し、データベースエンジンがプロシージャ内で参照されるオブジェクトの権限を検証するために使用するユーザーアカウントを指定します。例えば、先ほどの GetVacationHours のプロシージャを変更して、異なる実行コンテキストを定義することができます。
所有者(Snowflake Scriptingのデフォルト)
Transact-SQL¶
Snowflakeスクリプト¶
発信者¶
Transact-SQL¶
Snowflakeスクリプト¶
警告
SELF や特定のユーザー('user_name')の実行コンテキストは、Snowflake Scriptingではサポートされていません。
READONLY AND VARYING PARAMETERS¶
Snowflakeは READONLY と VARYING のパラメーター型をサポートしていません。代わりに FDM が追加されています。
Transact-SQL¶
Snowflakeスクリプト¶
既知の問題¶
サポートされていないオプション引数¶
[VARYING] カーソル パラメーターにのみ適用されます。出力パラメーターとしてサポートされる結果セットを指定します。このパラメーターはプロシージャによって動的に作成され、その内容は変化する可能性があります。Snowflake Scriptingは有効な戻り値のデータ型として CURSOR をサポートしていません。
[= default] デフォルト値を定義することで、パラメーターをオプションにします。Snowflake Scriptingは、デフォルトのパラメーター値をネイティブにサポートしていません。
[READONLY] プロシージャ本文内でパラメーターを更新または変更できないことを示します。現在Snowflake Scriptingではサポートされていません。
[WITH RECOMPILE] ストアドプロシージャが実行されるたびに、データベースエンジンにストアドプロシージャのクエリプランをコンパイルさせます。現在Snowflake Scriptingではサポートされていません。
[WITH ENCRYPTION] ストアドプロシージャのテキストを暗号化するために使用します。システムテーブルやデータベースファイルにアクセスできるユーザー(システム管理ユーザーなど)のみが、プロシージャの作成後にプロシージャテキストにアクセスすることができます。現在Snowflake Scriptingではサポートされていません。
[FOR REPLICATION] ストアドプロシージャが複製中にのみ実行されるように制限します。現在Snowflake Scriptingではサポートされていません。
関連 EWIs¶
SSC-EWI-0030: 以下のステートメントには、動的 SQL の使用があります。
SSC-EWI-0058: この関数は現在Snowflake Scriptingではサポートされていません。
CURSOR¶
Transact-SQL CURSOR ステートメントをSnowflakeスクリプトに変換するための翻訳リファレンス
Applies to
SQL Server
Azure Synapse Analytics
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
Transact-SQL statements produce a complete result set, but there are times when the results are best processed one row at a time. Opening a cursor on a result set allows processing the result set one row at a time. You can assign a cursor to a variable or parameter with a cursor data type. For more information, see the Transact-SQL Cursors documentation.
サンプルソースパターン¶
Transact-SQL¶
以下のパラメーターは、Snowflake Scriptingが本質的にサポートしていることに注意してください。
[LOCAL]。
[FORWARD_ONLY]。
[FAST_FORWARD] FORWARD_ONLY (FETCH NEXT のみ)と READ_ONLY を指定します
[READ_ONLY] WHERE CURRENT OF はSnowflake Scriptingには存在しません。
カーソル¶
結果¶
Snowflakeスクリプト¶
カーソル¶
結果¶
既知の問題¶
以下のパラメーターはサポートされていません。
DECLARE CURSOR
[ GLOBAL ] 接続で実行されるストアドプロシージャやバッチでカーソル名を参照できます。Snowflake Scriptingでは、ローカルでのみカーソルを使用できます。
[ SCROLL ] Snowflake Scriptingは FETCH NEXT のみをサポートしています。
[ KEYSET | DYNAMIC ] カーソルをオープンした後、テーブルの更新が行われた場合、これらのオプションはカーソルをフェッチする際に変更の一部を表示する可能性があります。Snowflake Scriptingは、STATIC のみをサポートしており、言い換えると、カーソルがオープンされた後、テーブルの変更はカーソルによって検出されません。
[SCROLL_LOCKS] カーソルを介して行われた位置指定の更新または削除が成功することが保証されることを指定しますが、Snowflake Scriptingではそれを保証できません。
[OPTIMISTIC] 更新や削除がカーソルを通して行われる時、その行がカーソルに読み込まれた後に変更されたかどうかを判断するために、タイムスタンプ列の値の比較、または、テーブルにタイムスタンプ列がない場合はチェックサム値を使用します。Snowflake Scriptingには複製するための内部プロセスはありません。
[TYPE_WARNING]
FETCH
[PRIOR | FIRST | LAST] Snowscriptingは NEXT のみをサポートしています。
[ABSOLUTE] Snowflake Scriptingは NEXT しかサポートしていませんが、動作の複製は可能です。
[RELATIVE] Snowflake Scriptingですが、動作の複製は可能です。
[ GLOBAL ] 接続で実行されるストアドプロシージャやバッチでカーソル名を参照できます。Snowflake Scriptingでは、ローカルでのみカーソルを使用できます。
INTO のない FETCH はサポートされていません。
FETCH ステートメントがループ内にある場合、Snowflakeが翻訳したコードのパフォーマンスに影響を与える可能性があるため、複雑なパターンと見なされます。詳しくは、関連する問題のセクションをご覧ください。
ループ内フェッチのサンプル¶
SQL Server¶
Snowflake¶
OPEN¶
[ GLOBAL ] 接続で実行されるストアドプロシージャやバッチでカーソル名を参照できます。Snowflake Scriptingでは、ローカルでのみカーソルを使用できます。
CLOSE
[ GLOBAL ] 接続で実行されるストアドプロシージャやバッチでカーソル名を参照できます。Snowflake Scriptingでは、ローカルでのみカーソルを使用できます。
DEALLOCATED カーソルの参照を削除します。Snowflake Scriptingには同等の機能はありません。
WHERE CURRENT OF このステートメントの使用はサポートされていません。例:
環境変数
@@CURSOR_ROWS
@@FETCH_STATUS
関連 EWIs¶
SSC-FDM-TS0013:Snowflake Scriptingのカーソル行は変更できません。
SSC-PRF-0003 :ループ内のフェッチは複雑なパターンとみなされるため、Snowflakeのパフォーマンスが低下する可能性があります。
DECLARE¶
Transact-SQL DECLARE ステートメントをSnowflakeスクリプトに変換するための翻訳リファレンス
Applies to
SQL Server
Azure Synapse Analytics
説明¶
Transact-SQL DECLARE statement allows the creation of variables that can be used in the scope of the batch or a stored procedure. For more information, see the Transact-SQL DECLARE documentation.
サンプルソースパターン¶
変数の宣言¶
変数はさまざまな方法で作成できます。変数にはデフォルト値があってもなくてもよく、同じ行で複数の変数を宣言することができます。
Notice that Snowflake Scripting does not allow creating more than one variable per line.
Transact-SQL¶
Snowflakeスクリプト¶
テーブル変数の宣言¶
Transact-SQL では、通常のテーブルとして使用できるテーブル変数の作成が可能です。Snowflake Scriptingはこれをサポートしませんが、代わりにテーブルを作成し、プロシージャの最後にドロップすることができます。
Transact-SQL¶
Snowflakeスクリプト¶
ルーチン(関数とプロシージャ)外の DECLARE ステートメント¶
Transact-SQL と異なり、Snowflakeは関数やプロシージャのようなルーチンの外側で DECLARE のような分離ステートメントを実行することをサポートしていません。このシナリオでは、ステートメントは次の例に示すように匿名ブロックにカプセル化する必要があります。このステートメントは通常SET STATEMENTの前に使われます。
Transact-SQL¶
Snowflakeスクリプト¶
DECLARE ステートメントのみを含むシナリオがある場合、このブロックは空にすることができないために、エラーを回避するために BEGIN...END ブロックに RETURN NULL ステートメントが必要です。
Transact-SQL¶
Snowflakeスクリプト¶
EXECUTE¶
Transact-SQL 実行ステートメントをSnowflakeに変換するための翻訳リファレンス
Applies to
SQL Server
Azure Synapse Analytics
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
Transact-SQL EXECUTE statement allows the execution of a command string or character string within a Transact-SQL batch, a scalar-valued user-defined function, or a stored procedure. For more information, see the Transact-SQL EXECUTE documentation.
サンプルソースパターン¶
文字列の実行¶
EXECUTE を使うと、リテラルとして直接渡された SQL の操作を実行できます。以下の例では、AdventureWorks2019 データベースに新しいプライバシー部門を挿入するストアドプロシージャの中で使用されています。
Transact-SQL¶
Snowflakeスクリプト¶
ストアドプロシージャの実行¶
EXECUTE を使用して既存のストアドプロシージャを呼び出すこともできます。次の例では、上で作成した AddPrivacyDepartment プロシージャを呼び出します。その後、SELECT を実行し、新しい部門が正常に組み込まれたことを確認します。
Transact-SQL¶
結果¶
DepartmentID |
名前 |
GroupName |
ModifiedDate |
|---|---|---|---|
1 |
エンジニアリング |
研究開発 |
2008-04-30 00:00:00.000 |
2 |
ツールデザイン |
研究開発 |
2008-04-30 00:00:00.000 |
3 |
販売 |
セールス&マーケティング |
2008-04-30 00:00:00.000 |
4 |
マーケティング |
セールス&マーケティング |
2008-04-30 00:00:00.000 |
5 |
購買 |
在庫管理 |
2008-04-30 00:00:00.000 |
6 |
研究開発 |
研究開発 |
2008-04-30 00:00:00.000 |
7 |
実稼働 |
製造 |
2008-04-30 00:00:00.000 |
8 |
生産管理 |
製造 |
2008-04-30 00:00:00.000 |
9 |
人事 |
経営全般および管理 |
2008-04-30 00:00:00.000 |
1 0 |
ファイナンス |
経営全般および管理 |
2008-04-30 00:00:00.000 |
1 1 |
情報サービス |
経営全般および管理 |
2008-04-30 00:00:00.000 |
1 2 |
ドキュメント管理 |
品質保証 |
2008-04-30 00:00:00.000 |
1 3 |
品質保証 |
品質保証 |
2008-04-30 00:00:00.000 |
1 4 |
施設とメンテナンス |
経営全般および管理 |
2008-04-30 00:00:00.000 |
1 5 |
出荷と入荷 |
在庫管理 |
2008-04-30 00:00:00.000 |
1 6 |
経営 |
経営全般および管理 |
2008-04-30 00:00:00.000 |
1 7 |
プライバシー |
経営全般および管理 |
2021-11-17 12:42:54.640 |
Snowflakeスクリプト¶
結果¶
DEPARTMENTID |
NAME |
GROUPNAME |
MODIFIEDDATE |
|---|---|---|---|
1 |
エンジニアリング |
研究開発 |
2021-11-17 10:29:36.963 |
2 |
ツールデザイン |
研究開発 |
2021-11-17 10:29:37.463 |
3 |
販売 |
セールス&マーケティング |
2021-11-17 10:29:38.192 |
4 |
マーケティング |
セールス&マーケティング |
2021-11-17 10:29:38.733 |
5 |
購買 |
在庫管理 |
2021-11-17 10:29:39.298 |
6 |
研究開発 |
研究開発 |
2021-11-17 10:31:53.770 |
7 |
実稼働 |
製造 |
2021-11-17 10:31:55.082 |
8 |
生産管理 |
製造 |
2021-11-17 10:31:56.638 |
9 |
人事 |
経営全般および管理 |
2021-11-17 10:31:57.507 |
10 |
ファイナンス |
経営全般および管理 |
2021-11-17 10:31:58.473 |
11 |
情報サービス |
経営全般および管理 |
2021-11-17 10:34:35.200 |
12 |
ドキュメント管理 |
品質保証 |
2021-11-17 10:34:35.741 |
13 |
品質保証 |
品質保証 |
2021-11-17 10:34:36.277 |
14 |
施設とメンテナンス |
経営全般および管理 |
2021-11-17 10:34:36.832 |
15 |
出荷と入荷 |
在庫管理 |
2021-11-17 10:34:37.373 |
16 |
経営 |
経営全般および管理 |
2021-11-17 10:34:37.918 |
17 |
プライバシー |
経営全般および管理 |
2021-11-17 10:46:43.345 |
ローカル変数の実行とパラメーターの使用¶
EXECUTE ステートメントの一般的な使用例は、動的な SQL ステートメントが必要な場合です。このような場合、文字列リテラルを実行する代わりに、ステートメントを動的に構築してローカル変数に割り当て、それを実行することができます。呼び出されたストアドプロシージャに引数のセットを送信して、動的な SQL コマンドを構築することができます。
次の例では、EXECUTE ステートメントを使用して、呼び出し元から送られた引数に基づいて新しい商品価格をセットする、単純な SetNewPrice ストアドプロシージャが構築されています。最後に新しい商品価格を確認するために SELECT が実行されます。
Transact-SQL¶
結果¶
ListPrice |
|---|
34.9900 |
Snowflakeスクリプト¶
結果¶
LISTPRICE |
|---|
34.9900 |
既知の問題¶
リターンコードの使用¶
Transact-SQL EXECUTE 構文には@return_statusオプション引数があり、スカラー値ユーザー定義関数の戻りステータスを格納するスカラー変数を作成することができます。
ストアドプロシージャでも使用できますが、返されるステータスは整数データ型に制限されます。
この機能を表現するために、上記の例を少し修正し、ユーザー定義関数を作成して、新しい商品価格を過去の価格の平均として計算することができます。ストアドプロシージャに渡す代わりに、CalculateAveragePrice 関数を呼び出して新しい価格を取得し、それをリターン変数に格納して動的な SQL を構築することができます。
Transact-SQL¶
実行¶
結果¶
ListPrice |
|---|
34.0928 |
Snowflakeスクリプト¶
サポートされていないオプション引数¶
@return_status
;number
@module__name_v_ar
WITH RECOMPILE、WITH RESULT SETS NONE、WITH <結果セット定義>
関連 EWIs¶
SSC-EWI-0030: 以下のステートメントには、動的 SQL の使用があります。
IF¶
Transact-SQL IF..ELSE 句をSnowflakeスクリプトに変換するための翻訳リファレンス
Applies to
SQL Server
Azure Synapse Analytics
説明¶
IF 句は、SQL ステートメントまたはステートメントのブロックを、ブール式がtrueである限り条件付きで実行することを可能にします。そうでない場合は、オプションの ELSE 句のステートメントが実行されます。Transact-SQL は、複数の条件が必要な場合に複数の IF... ELSE 句を埋め込むこともサポートしており、CASE 句も使用できます。
For more information, see the Transact-SQL IF...ELSE documentation.
注意: ステートメントブロックを定義するには、フロー制御キーワード BEGIN と END を使用します。
サンプルソースパターン¶
Transact-SQL¶
次のコードは、変数@valueが5より小さいか、5以上10以下か、あるいはそれ以外の値かを識別するために、変数@valueを条件付けるTransact-SQL の IF... ELSE を参照しています。@valueは7として初期化されているので、2番目の条件はtrueでなければならず、結果は200でなければなりません。
IF...ELSE¶
結果¶
結果 |
|---|
200 |
Snowflakeスクリプト¶
注釈
Snowflake Scriptingでは、埋め込まれた IF... ELSE の条件は ELSEIF と呼ばれることに注意してください。
また、ブール条件は括弧で囲まれ、句は常に END IF 式で終わります。
また、Snowflake Scriptingでは、ステートメントブロックを定義するために BEGIN および END キーワードを使用する必要はありませんが、必要に応じて使用することができます。
IF...ELSE¶
結果¶
結果 |
|---|
200 |
ルーチン(関数とプロシージャ)外の IF ステートメント¶
Transact-SQL とは異なり、Snowflakeは関数やプロシージャのようなルーティンの外部で、 IF...ELSE のような分離されたステートメントの実行をサポートしていません。このシナリオでは、次の例に示すように、ステートメントを匿名ブロックにカプセル化する必要があります。 出力値を正しく返す方法については、 SELECT セクション をご参照ください。
Transact-SQL¶
Snowflakeスクリプト¶
関連 EWIs¶
SSC-EWI-0073: 機能同等性レビュー保留中。
SSC-FDM-0020: 仮テーブルに複数の結果セットが返されます。
LABEL および GOTO¶
Transact-SQL で LABEL AND GOTO を変換するための翻訳リファレンス
Applies to
SQL Server
説明¶
Snowflake SQL は GOTO LABEL ステートメントをサポートしていません。現在、LABELS はコメントされ、すべての発生に対して警告が追加されています。
サンプルソースパターン¶
以下の例では、BEGIN および COMMIT のトランザクションステートメントについて詳しく説明します。
Transact-SQL¶
ラベル付きステートメント¶
Snowflake SQL¶
ラベル付きステートメント¶
ルーチン(関数とプロシージャ)外の LABEL および GOTO ステートメント¶
Transact-SQL¶
Snowflakeスクリプト¶
関連 EWIs¶
SSC-EWI-TS0045: ラベル付きステートメントはSnowflake Scriptingではサポートされていません。
SSC-EWI-0073: 機能同等性レビュー保留中。
OUTPUT PARAMETERS¶
この記事は、現在の出力パラメーターの変換と、その機能がどのようにエミュレートされているかについて説明しています。
Applies to
SQL Server
Azure Synapse Analytics
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
An output parameter is a parameter whose value is passed out of the stored procedure, back to the calling SQL block. Since the output parameters are not supported by Snowflake Scripting, a solution has been implemented to emulate their functionality.
サンプルソースパターン¶
単一の OUT パラメーター¶
OUT パラメーターの最も基本的なシナリオは、プロシージャにパラメーターが1つしかない場合です。この場合、プロシージャ本文の最後に OUT パラメーターを返すだけです。
EXEC プロシージャも翻訳する必要があります。そのために、CALL が作成され、パラメーターは修飾子なしで渡されます("OUT"は削除されます)。その後、パラメーターがそれぞれの結果の値と関連付けられるように、割り当てが行われます。
Transact-SQL¶
Snowflakeスクリプト¶
複数の OUT パラメーター¶
OUT パラメーターが複数見つかった場合、プロシージャの RETURNS 句は VARIANT に変更されます。これは、OUT パラメーターの値を格納するために使用される OBJECT_CONSTRUCT を収容するためです。
その上、プロシージャ本文の最後に RETURN ステートメントが追加されています。ここで OBJECT_COSNTRUCT が作成され、その中に OUT パラメーター値がすべて格納されます。このオブジェクトは、呼び出し元がパラメーターの値を対応する結果に割り当てるために使用されます。
Transact-SQL¶
Snowflakeスクリプト¶
OUT パラメーターと戻り値¶
Transact-SQL では、プロシージャに戻り値を持たせることができます。プロシージャが戻り値と OUT パラメーターの両方を持つ場合、複数の OUT パラメーターシナリオと同様のアプローチをとります。元の戻り値は OUT パラメーターと同じように扱われるため、OBJECT_CONSTRUCT 内に格納され、呼び出し元プロシージャ内で取り出されます。
Transact-SQL¶
Snowflakeスクリプト¶
クエリ¶
顧客データ型 OUT パラメーター¶
when the output parameter is a custom type, the process is similar to a regular data type.
Transact-SQL¶
Snowflakeスクリプト¶
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
SSC-EWI-0073: 機能同等性レビュー保留中。
SSC-EWI-TS0015 :データ型はSnowflakeではサポートされていません
SET¶
Transact-SQL SET ステートメントをSnowflakeに変換するための翻訳リファレンス
Applies to
SQL Server
Azure Synapse Analytics
説明¶
Sets the specified local variable, previously created by using the DECLARE @local_variable statement, to the specified value. For more information, see the Transact-SQL SET documentation.
以下の4つの SET ケースがあります。
サンプルソースパターン¶
Transact-SQL¶
ケース1¶
ケース2¶
結果1¶
結果 |
|---|
0 |
Snowflakeスクリプト¶
ケース1¶
ケース2¶
結果1¶
結果 |
|---|
0 |
ルーチン(関数とプロシージャ)外の SET ステートメント¶
Transact-SQL と異なり、Snowflakeは関数やプロシージャのようなルーチンの外側で SET のような分離ステートメントを実行することをサポートしていません。このシナリオでは、ステートメントは次の例に示すように匿名ブロックにカプセル化する必要があります。このステートメントは通常、DECLARE STATEMENTの後に使用します。
Transact-SQL¶
Snowflakeスクリプト¶
SET ステートメントだけのシナリオであれば、DECLARE ブロックは必要ありません。おそらくこのシナリオでは、宣言されていない変数に値をセットしようとするとランタイムエラーが発生します。
Transact-SQL¶
Snowflakeスクリプト¶
既知の問題¶
1.プロパティ名を持つローカル変数の SET¶
このタイプのセットは、現在Snowflake Scriptingではサポートされていません。
2.ミューテーターメソッドを持つローカル変数の SET¶
このタイプのセットは、現在Snowflake Scriptingではサポートされていません。
関連 EWIs¶
SSC-EWI-TS0037:Snowflake Scriptingカーソルはスクロールできません。
SSC-EWI-0073: 機能同等性レビュー保留中。
SSC-FDM-TS0013:Snowflake Scriptingのカーソル行は変更できません。
TRY CATCH¶
Transact-SQL の TRY CATCH ステートメントの翻訳リファレンス。
Applies to
SQL Server
Azure Synapse Analytics
説明¶
Transact SQL のエラー処理を実装します。Transact-SQL ステートメントのグループは TRY ブロックで囲むことができます。TRY ブロックでエラーが発生した場合、通常は CATCH ブロックで囲まれた別のステートメントグループに制御が渡されます。
サンプルソースパターン¶
次の例では、プロシージャ内部の TRY CATCH の変換について詳しく説明します。
Transact-SQL¶
出力¶
Snowflake SQL¶
出力¶
ルーチン(関数とプロシージャ)の外側のtry catch¶
Transact-SQL¶
Snowflakeスクリプト¶
関連 EWIs¶
SSC-FDM-0020: 仮テーブルに複数の結果セットが返されます。
WHILE¶
Transact-SQL WhileステートメントをSnowflakeスクリプトに変換するための翻訳リファレンス
Applies to
SQL Server
Azure Synapse Analytics
説明¶
Whileステートメントを使用すると、SQL ステートメントまたはステートメントのブロックを、指定された条件がtrueである限り繰り返し実行することができます。WHILE ループ内のステートメントの実行は、ループ内部から BREAK と CONTINUE キーワードで制御できます。
For more information, see the Transact-SQL WHILE documentation.
注意: ステートメントブロックを定義するには、フロー制御キーワード BEGIN と END を使用します。
サンプルソースパターン¶
基本ソースパターンコード¶
Transact-SQL¶
次のコードは、Transact-SQL のWhileループを参照しています。変数@Iterationを繰り返し処理し、@Iterationの値が10になったときにループが終了するようにフローを制御します。
注釈
CONTINUE キーワード以降のステートメントは実行されません。
While¶
結果¶
反復 |
|---|
10 |
Snowflakeスクリプト¶
注釈
Transact-SQL と同様に、Snowflake Scriptingでは CONTINUE キーワード以降のステートメントは実行されません。
Snowflake Scriptingでは、ステートメントブロックを定義するために BEGIN および END キーワードを使用する必要はありませんが、必要に応じて使用することができることに注意してください。
While¶
ループキーワード¶
Snowflake Scriptingでは、DO の代わりに LOOP キーワードを、END WHILE の代わりに END LOOP 式を使用することができます。
結果¶
反復 |
|---|
10 |
空の本文ソースパターンを持つWhile¶
Transact-SQL¶
注釈
この例は、IF ELSE ステートメントがサポートされていない間に書かれたものであることに注意してください。ステートメントがサポートされるようになれば、結果の違いはなくなるはずです。
結果¶
結果 |
|---|
125 |
Snowflakeスクリプト¶
このステートメントは、Snowflake Scriptingでは本文が空であることはできません。このケースを解決するために、本文が空であることが検出された場合、デフォルトの BREAK ステートメントが追加されます。
結果¶
結果 |
|---|
1 |
ルーチン(関数とプロシージャ)外の WHILE ステートメント¶
Transact-SQL と異なり、Snowflakeは関数やプロシージャのようなルーチンの外側で WHILE のような分離ステートメントを実行することをサポートしていません。このシナリオでは、ステートメントは次の例に示すように匿名ブロックにカプセル化する必要があります。
Transact-SQL¶
Snowflakeスクリプト¶
関連 EWIs¶
SSC-EWI-0073: 機能同等性レビュー保留中。