SnowConvert AI - SQL Server - CREATE FUNCTION¶
Transact-SQL ユーザー定義関数の翻訳リファレンス
Applies to
SQL Server
Azure Synapse Analytics
説明¶
SQL Serverは、2種類の ユーザー定義関数 のみをサポートしています。
これらの UDFs 型を使用すると、内部ロジックに従って 単純なものと複雑なもの にサブカテゴリー化することが可能です。
単純 UDFs は SQL Server構文をSnowflake構文と一致させます。この型はロジックを追加せず、結果に直接向かいます。これらは通常、Snowflakeの SQL UDFs に一致します。 SnowConvert は、特定の基準を満たしている場合、 SQL Serverスカラーユーザー定義関数の Snowflakeスクリプト UDFs への直接的な翻訳をサポートしています。\ \ 複雑な UDFs は特定のステートメント( INSERT、 DELETE 、 UPDATE 、 SET 、 DECLARE など)や control-of-flow ブロック( IF...ELSE 、 WHILE など)を広く使用し、通常Snowflakeの SQL UDFs 定義との不一致や違反を表します。
制限事項¶
Transact UDFs は、他のデータベースエンジン(OracleやTeradataなど)にはない制限があります。これらの制限は、失敗の範囲を狭めることによって翻訳に役立ちます。つまり、避けるべきシナリオがあるということです。
以下に、SQL Serverが UDFs に対して持つ制限の一部を示します
UDFs はデータベースの状態を変更するアクションの実行には使用できません
ユーザー定義関数に、テーブルをターゲットとする OUTPUT INTO 句を含めることはできません
ユーザー定義関数は複数の結果セットを返すことはできません。複数の結果セットを返す必要がある場合は、ストアドプロシージャを使用します。
全リストはこちらのリンク ユーザー定義関数の作成(データベースエンジン)をご覧ください
INLINE TABLE-VALUED¶
TABLE 戻り型を持つTransact-SQL UDF (ユーザー定義関数)をSnowflakeに変換するための翻訳リファレンス。
Applies to
SQL Server
Azure Synapse Analytics
説明¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
Inline Table-Valued関数は、パラメーターを受け取り、SELECT ステートメントを実行し、TABLE (SQL Server言語リファレンスInline Table-Valued関数の作成) を返すことができるテーブル式です。
Transact構文¶
Snowflake SQL 構文¶
サンプルソースパターン¶
次のセクションでは、この種の CREATE FUNCTION 構文で出現し得るすべてのソースコードパターンについて説明します。
Inline Table-Valued関数の場合、本文ごとに次のステートメントが1つだけ存在できます。
SELECTステートメントWITH共通テーブル式
1つのテーブルから直接値を選択して返す¶
これは最も単純なシナリオで、テーブルから単純なselectを実行し、その値を返します
Transact-SQL¶
インラインTable-Valued¶
結果¶
DepartmentID |
名前 |
GroupName |
|---|---|---|
1 |
エンジニアリング |
研究開発 |
2 |
ツールデザイン |
研究開発 |
3 |
販売 |
セールス&マーケティング |
4 |
マーケティング |
セールス&マーケティング |
5 |
購買 |
在庫管理 |
6 |
研究開発 |
研究開発 |
7 |
実稼働 |
製造 |
8 |
生産管理 |
製造 |
9 |
人事 |
経営全般および管理 |
10 |
ファイナンス |
経営全般および管理 |
11 |
情報サービス |
経営全般および管理 |
12 |
ドキュメント管理 |
品質保証 |
13 |
品質保証 |
品質保証 |
14 |
施設とメンテナンス |
経営全般および管理 |
15 |
出荷と入荷 |
在庫管理 |
16 |
経営 |
経営全般および管理 |
Snowflake SQL¶
インラインTable-Valued¶
結果¶
DepartmentID |
名前 |
GroupName |
|---|---|---|
1 |
エンジニアリング |
研究開発 |
2 |
ツールデザイン |
研究開発 |
3 |
販売 |
セールス&マーケティング |
4 |
マーケティング |
セールス&マーケティング |
5 |
購買 |
在庫管理 |
6 |
研究開発 |
研究開発 |
7 |
実稼働 |
製造 |
8 |
生産管理 |
製造 |
9 |
人事 |
経営全般および管理 |
10 |
ファイナンス |
経営全般および管理 |
11 |
情報サービス |
経営全般および管理 |
12 |
ドキュメント管理 |
品質保証 |
13 |
品質保証 |
品質保証 |
14 |
施設とメンテナンス |
経営全般および管理 |
15 |
出荷と入荷 |
在庫管理 |
16 |
経営 |
経営全般および管理 |
列名を変更し、組み込み関数を使用して複数のテーブルから値を選択して返す¶
これは、selectステートメントで組み込み関数を使用して、異なるテーブルからデータを取得し、列の名前を変更してテーブルを返すクエリの例です。
Transact-SQL¶
インラインTable-Valued¶
結果¶
PersonType |
FirstName |
JobTitle |
性別 |
HIREYEAR |
|---|---|---|---|---|
EM |
ケン |
Chief Executive Officer |
M |
2009 |
EM |
Terri |
Vice President of Engineering |
F |
2008 |
EM |
Roberto |
Engineering Manager |
M |
2007 |
EM |
Rob |
Senior Tool Designer |
M |
2007 |
EM |
Gail |
Design Engineer |
F |
2008 |
EM |
Jossef |
Design Engineer |
M |
2008 |
EM |
Dylan |
Research and Development Manager |
M |
2009 |
EM |
Diane |
Research and Development Engineer |
F |
2008 |
EM |
Gigi |
Research and Development Engineer |
F |
2009 |
EM |
Michael |
Research and Development Manager |
M |
2009 |
EM |
Ovidiu |
Senior Tool Designer |
M |
2010 |
EM |
Thierry |
Tool Designer |
M |
2007 |
EM |
Janice |
Tool Designer |
F |
2010 |
EM |
Michael |
Senior Design Engineer |
M |
2010 |
EM |
Sharon |
Design Engineer |
F |
2011 |
EM |
デイビッド |
Marketing Manager |
M |
2007 |
EM |
Kevin |
Marketing Assistant |
M |
2007 |
EM |
John |
Marketing Specialist |
M |
2011 |
EM |
Mary |
Marketing Assistant |
F |
2011 |
EM |
Wanida |
Marketing Assistant |
F |
2011 |
Snowflake SQL¶
インラインTable-Valued¶
結果¶
PersonType |
FirstName |
JobTitle |
性別 |
HIREYEAR |
|---|---|---|---|---|
EM |
ケン |
Chief Executive Officer |
M |
2009 |
EM |
Terri |
Vice President of Engineering |
F |
2008 |
EM |
Roberto |
Engineering Manager |
M |
2007 |
EM |
Rob |
Senior Tool Designer |
M |
2007 |
EM |
Gail |
Design Engineer |
F |
2008 |
EM |
Jossef |
Design Engineer |
M |
2008 |
EM |
Dylan |
Research and Development Manager |
M |
2009 |
EM |
Diane |
Research and Development Engineer |
F |
2008 |
EM |
Gigi |
Research and Development Engineer |
F |
2009 |
EM |
Michael |
Research and Development Manager |
M |
2009 |
EM |
Ovidiu |
Senior Tool Designer |
M |
2010 |
EM |
Thierry |
Tool Designer |
M |
2007 |
EM |
Janice |
Tool Designer |
F |
2010 |
EM |
Michael |
Senior Design Engineer |
M |
2010 |
EM |
Sharon |
Design Engineer |
F |
2011 |
EM |
デイビッド |
Marketing Manager |
M |
2007 |
EM |
Kevin |
Marketing Assistant |
M |
2007 |
EM |
John |
Marketing Specialist |
M |
2011 |
EM |
Mary |
Marketing Assistant |
F |
2011 |
EM |
Wanida |
Marketing Assistant |
F |
2011 |
WITH ステートメントを使用して列を選択する¶
inline table-valued関数の本文は、以下のように WITH ステートメントを使用して指定することもできます。
Transact-SQL¶
インラインTable-Valued¶
結果¶
MaritalStatus |
性別 |
名前 |
|---|---|---|
S |
F |
Terri Duffy |
M |
F |
Gail Erickson |
S |
F |
Diane Margheim |
M |
F |
Gigi Matthew |
M |
F |
Janice Galvin |
M |
F |
Sharon Salavaria |
S |
F |
Mary Dempsey |
M |
F |
Wanida Benshoof |
M |
F |
Mary Gibson |
M |
F |
Jill Williams |
S |
F |
Jo Brown |
M |
F |
Britta Simon |
M |
F |
Margie Shoop |
M |
F |
Rebecca Laszlo |
M |
F |
Suchitra Mohan |
M |
F |
Kim Abercrombie |
S |
F |
JoLynn Dobney |
M |
F |
Nancy Anderson |
M |
F |
Ruth Ellerbrock |
M |
F |
Doris Hartwig |
M |
F |
Diane Glimp |
M |
F |
Bonnie Kearney |
M |
F |
Denise Smith |
S |
F |
Diane Tibbott |
M |
F |
Carole Poland |
M |
F |
Carol Philips |
M |
F |
Merav Netz |
S |
F |
Betsy Stadick |
S |
F |
Danielle Tiedt |
S |
F |
Kimberly Zimmerman |
M |
F |
Elizabeth Keyser |
M |
F |
Mary Baker |
M |
F |
Alice Ciccu |
M |
F |
Linda Moschell |
S |
F |
Angela Barbariol |
S |
F |
Kitti Lertpiriyasuwat |
S |
F |
Susan Eaton |
S |
F |
Kim Ralls |
M |
F |
Nicole Holliday |
S |
F |
Anibal Sousa |
M |
F |
Samantha Smith |
S |
F |
Olinda Turner |
S |
F |
Cynthia Randall |
M |
F |
Sandra Reátegui Alayo |
S |
F |
Linda Randall |
S |
F |
Shelley Dyck |
S |
F |
Laura Steele |
S |
F |
Susan Metters |
S |
F |
Katie McAskill-White |
M |
F |
Barbara Decker |
M |
F |
Yvonne McKay |
S |
F |
Janeth Esteves |
M |
F |
Brenda Diaz |
M |
F |
Lorraine Nay |
M |
F |
Paula Nartker |
S |
F |
Lori Kane |
M |
F |
Kathie Flood |
S |
F |
Belinda Newman |
M |
F |
Karen Berge |
M |
F |
Lori Penor |
M |
F |
Jo Berry |
M |
F |
Laura Norman |
M |
F |
Paula Barreto de Mattos |
M |
F |
Mindy Martin |
M |
F |
Deborah Poe |
S |
F |
Candy Spoon |
M |
F |
Barbara Moreland |
M |
F |
Janet Sheperdigian |
S |
F |
Wendy Kahn |
S |
F |
Sheela Word |
M |
F |
Linda Meisner |
S |
F |
Erin Hagens |
M |
F |
Annette Hill |
S |
F |
Jean Trenary |
S |
F |
Stephanie Conroy |
S |
F |
Karen Berg |
M |
F |
Janaina Bueno |
M |
F |
Linda Mitchell |
S |
F |
Jillian Carson |
S |
F |
Pamela Ansman-Wolfe |
S |
F |
Lynn Tsoflias |
M |
F |
Amy Alberts |
S |
F |
Rachel Valdez |
M |
F |
Jae Pak |
Snowflake SQL¶
インラインTable-Valued¶
結果¶
MaritalStatus |
性別 |
名前 |
|---|---|---|
S |
F |
Terri Duffy |
M |
F |
Gail Erickson |
S |
F |
Diane Margheim |
M |
F |
Gigi Matthew |
M |
F |
Janice Galvin |
M |
F |
Sharon Salavaria |
S |
F |
Mary Dempsey |
M |
F |
Wanida Benshoof |
M |
F |
Mary Gibson |
M |
F |
Jill Williams |
S |
F |
Jo Brown |
M |
F |
Britta Simon |
M |
F |
Margie Shoop |
M |
F |
Rebecca Laszlo |
M |
F |
Suchitra Mohan |
M |
F |
Kim Abercrombie |
S |
F |
JoLynn Dobney |
M |
F |
Nancy Anderson |
M |
F |
Ruth Ellerbrock |
M |
F |
Doris Hartwig |
M |
F |
Diane Glimp |
M |
F |
Bonnie Kearney |
M |
F |
Denise Smith |
S |
F |
Diane Tibbott |
M |
F |
Carole Poland |
M |
F |
Carol Philips |
M |
F |
Merav Netz |
S |
F |
Betsy Stadick |
S |
F |
Danielle Tiedt |
S |
F |
Kimberly Zimmerman |
M |
F |
Elizabeth Keyser |
M |
F |
Mary Baker |
M |
F |
Alice Ciccu |
M |
F |
Linda Moschell |
S |
F |
Angela Barbariol |
S |
F |
Kitti Lertpiriyasuwat |
S |
F |
Susan Eaton |
S |
F |
Kim Ralls |
M |
F |
Nicole Holliday |
S |
F |
Anibal Sousa |
M |
F |
Samantha Smith |
S |
F |
Olinda Turner |
S |
F |
Cynthia Randall |
M |
F |
Sandra Reátegui Alayo |
S |
F |
Linda Randall |
S |
F |
Shelley Dyck |
S |
F |
Laura Steele |
S |
F |
Susan Metters |
S |
F |
Katie McAskill-White |
M |
F |
Barbara Decker |
M |
F |
Yvonne McKay |
S |
F |
Janeth Esteves |
M |
F |
Brenda Diaz |
M |
F |
Lorraine Nay |
M |
F |
Paula Nartker |
S |
F |
Lori Kane |
M |
F |
Kathie Flood |
S |
F |
Belinda Newman |
M |
F |
Karen Berge |
M |
F |
Lori Penor |
M |
F |
Jo Berry |
M |
F |
Laura Norman |
M |
F |
Paula Barreto de Mattos |
M |
F |
Mindy Martin |
M |
F |
Deborah Poe |
S |
F |
Candy Spoon |
M |
F |
Barbara Moreland |
M |
F |
Janet Sheperdigian |
S |
F |
Wendy Kahn |
S |
F |
Sheela Word |
M |
F |
Linda Meisner |
S |
F |
Erin Hagens |
M |
F |
Annette Hill |
S |
F |
Jean Trenary |
S |
F |
Stephanie Conroy |
S |
F |
Karen Berg |
M |
F |
Janaina Bueno |
M |
F |
Linda Mitchell |
S |
F |
Jillian Carson |
S |
F |
Pamela Ansman-Wolfe |
S |
F |
Lynn Tsoflias |
M |
F |
Amy Alberts |
S |
F |
Rachel Valdez |
M |
F |
Jae Pak |
既知の問題¶
問題は見つかりませんでした
MULTI-STATEMENT TABLE-VALUED¶
TABLE 戻り型を持つTransact-SQL UDF (ユーザー定義関数)をSnowflakeに変換するための翻訳リファレンス。
Applies to
SQL Server
Azure Synapse Analytics
注釈
わかりやすくするため、出力コードの一部を省略しています。
注釈
このページのすべてのコードサンプルは、まだ SnowConvert AI に実装されていません。各シナリオをどのようにSnowflakeに翻訳すべきかの参照情報として解釈される必要があります。これらの翻訳は今後変更される可能性があります。わかりやすくするため、出力コードの一部を省略しています。
説明¶
マルチステートメントtable-valuedは、インラインステートメントtable-valuedに似ています( INLINE TABLE-VALUED )。ただし、マルチステートメントtable-valuedは、関数本体に複数のステートメントを持つことがあり、テーブル列は戻り型で指定され、 BEGIN/END ブロックを持ちます( SQL Server言語リファレンス マルチステートメントtable-valued関数の作成 )
Transact-SQL 構文¶
Snowflake SQL¶
サンプルソースパターン¶
次のセクションでは、この種の ofCREATE FUNCTION 構文に出てくる可能性がある、すべてのソースコードパターンについて説明します。
Multi-Statement Table-Valued関数の関数本文は、SELECT ステートメントでなければなりません。このため、他のステートメントは個別に呼び出す必要があります。
テーブルに値を挿入する¶
テーブルに1つ以上の行を挿入し、新しい値を含むテーブルを返す
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
BEHAVIORAL_SEGMENT |
|---|
不明 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
BEHAVIORAL_SEGMENT |
|---|
不明 |
if/elseステートメントに従って値を挿入する¶
条件に従ってテーブルに行を挿入し、新しい値を含むテーブルを返す
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
NUMBER_TYPE |
|---|
Odd |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
NUMBER_TYPE |
|---|
Odd |
if/elseステートメントに従って複数挿入する¶
以下の例では、複数の値をテーブルに挿入し、条件に応じて複数の変数が変更されます。新しい値を含むテーブルを返す
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
ID_EMPLOYEE |
WORKING_FROM_HOME |
TEAM |
COMPUTER |
|---|---|---|---|
123456789 |
1 |
TEAM_1 |
LAPTOP |
Snowflake¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
ID_EMPLOYEE |
WORKING_FROM_HOME |
TEAM |
COMPUTER |
|---|---|---|---|
123456789 |
1 |
TEAM_1 |
LAPTOP |
警告
ネストされたifステートメントがあり、ステートメント内で複数の変数が変更される場合は、ストアドプロシージャを使用する必要があります。
以前に挿入した値の更新¶
テーブルの列値を関数本文に更新し、新しい値を返します。
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
DEPARTMENT_NAME |
FIRST_NAME |
LAST_NAME |
START_DATE |
END_DATE |
JOB_TITLE |
MONTHS_WORKING |
|---|---|---|---|---|---|---|
販売 |
Syed |
Abbas |
2013-03-14 |
NULL |
Pacific Sales Manager |
106 |
実稼働 |
Kim |
Abercrombie |
2010-01-16 |
NULL |
Production Technician - WC60 |
144 |
品質保証 |
Hazem |
Abolrous |
2009-02-28 |
NULL |
Quality Assurance Manager |
155 |
出荷と入荷 |
Pilar |
Ackerman |
2009-01-02 |
NULL |
Shipping and Receiving Supervisor |
156 |
実稼働 |
Jay |
Adams |
2009-03-05 |
NULL |
Production Technician - WC60 |
154 |
情報サービス |
François |
Ajenstat |
2009-01-17 |
NULL |
Database Administrator |
156 |
販売 |
Amy |
Alberts |
2012-04-16 |
NULL |
European Sales Manager |
117 |
実稼働 |
Greg |
Alderson |
2008-12-02 |
NULL |
Production Technician - WC45 |
157 |
品質保証 |
Sean |
Alexander |
2008-12-28 |
NULL |
Quality Assurance Technician |
157 |
施設とメンテナンス |
Gary |
Altman |
2009-12-02 |
NULL |
Facilities Manager |
145 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
DEPARTMENT_NAME |
FIRST_NAME |
LAST_NAME |
START_DATE |
END_DATE |
JOB_TITLE |
MONTHS_WORKING |
|---|---|---|---|---|---|---|
販売 |
Syed |
Abbas |
2013-03-14 |
NULL |
Pacific Sales Manager |
106 |
実稼働 |
Kim |
Abercrombie |
2010-01-16 |
NULL |
Production Technician - WC60 |
144 |
品質保証 |
Hazem |
Abolrous |
2009-02-28 |
NULL |
Quality Assurance Manager |
155 |
出荷と入荷 |
Pilar |
Ackerman |
2009-01-02 |
NULL |
Shipping and Receiving Supervisor |
156 |
実稼働 |
Jay |
Adams |
2009-03-05 |
NULL |
Production Technician - WC60 |
154 |
情報サービス |
François |
Ajenstat |
2009-01-17 |
NULL |
Database Administrator |
156 |
販売 |
Amy |
Alberts |
2012-04-16 |
NULL |
European Sales Manager |
117 |
実稼働 |
Greg |
Alderson |
2008-12-02 |
NULL |
Production Technician - WC45 |
157 |
品質保証 |
Sean |
Alexander |
2008-12-28 |
NULL |
Quality Assurance Technician |
157 |
施設とメンテナンス |
Gary |
Altman |
2009-12-02 |
NULL |
Facilities Manager |
145 |
複数の戻り句¶
以下のサンプルでは戻り句が複数ありますが、これは状況に応じて関数全体を実行し続ける必要がないためです。
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
TYPE |
NAME |
|---|---|
SMALL_TEAM |
TEAM1 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
TYPE |
NAME |
|---|---|
SMALL_TEAM |
TEAM1 |
警告
この変換は、挿入する値が1つだけの場合に適用されます。複数の値がある場合は、ストアドプロシージャを使用する必要があります。
複雑なケース¶
この例は、ネストされた if ステートメントを使用し、真の条件に応じて値を挿入する複雑なケースです。
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
VACATION_STATUS |
|---|
OK |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
2つ目のタブ¶
VACATION_STATUS |
|---|
OK |
既知の問題¶
クエリに沿ったWhileステートメント¶
この例の問題点は、メインセレクトの WITH 句の中でwhileステートメントを CTE に変換する方法がないことです。このため、同じロジックを維持するために、このステートメントをストアプロシージャに変換せざるを得ません。
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
GROUP_NAME |
|---|
ツールデザイン |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
GROUP_NAME |
|---|
ツールデザイン |
カーソル宣言¶
ユーザー定義関数は、CURSOR を DECLARE、OPEN、FETCH、CLOSE、DEALLOCATE することはできません。ストアドプロシージャを使用してカーソルを操作します。
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
AMOUNT |
|---|
3 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
AMOUNT |
|---|
3 |
共通テーブル式では、異なるステートメントはサポートされていません¶
UPDATE、INSERT、DELETE、ALTER、DROP の句は、区切り文字を使用して宣言した後でも、共通テーブル式の本文ではサポートされていません。このため、関数をストアドプロシージャとして動作するように変更することができます。
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
PRODUCT_NAME |
評価 |
|---|---|
HL Mountain Pedal |
3 |
Mountain Bike Socks, M |
5 |
Road-550-W Yellow, 40 |
5 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
結果¶
PRODUCT_NAME |
評価 |
|---|---|
HL Mountain Pedal |
3 |
Mountain Bike Socks, M |
5 |
Road-550-W Yellow, 40 |
5 |
関連 EWIs¶
SSC-EWI-0040 :ステートメントがサポートされていません。
SSC-EWI-0073: 機能同等性レビュー保留中
SCALAR¶
スカラー戻り型を持つTransact-SQL UDF (ユーザー定義関数)をSnowflakeに変換するための翻訳リファレンス。
Applies to
SQL Server
Azure Synapse Analytics
説明¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
スカラーユーザー定義関数は、Transact-SQL または共通言語ランタイム( CLR )ルーティンで、パラメーターを受け取り、複雑な計算などのアクションを実行し、そのアクションの結果をスカラー値として返します。( SQL Server言語 ReferenceCREATE FUNCTION サブセクション )。
注釈
これらの関数は通常、SELECT ステートメントの内部で使用されるか、単一変数のセットアップ(ストアドプロシージャの内部で使用されることがほとんどです)で使用されます。
Transact-SQL 構文¶
Snowflake構文¶
Snowflakeでは、ユーザー定義関数で3つの異なる言語を使用できます。
SQL
JavaScript
Java
今のところ、 SnowConvert AI はターゲット言語として SQL と JavaScript のみをサポートします。
SQL¶
注釈
SQL ユーザー定義関数は、本文として1つのクエリしかサポートしていません。データベースからの読み取りは可能ですが、書き込みや変更はできません。(スカラー SQL UDFs リファレンス)。
JavaScript¶
注釈
JavaScript ユーザー定義関数は、本文中に複数のステートメントを記述することができますが、データベースへのクエリを実行することはできません。(スカラー JavaScript UDFs リファレンス)
サンプルソースパターン¶
SetおよびDeclareステートメント¶
関数本文で最もよく使われるステートメントは DECLARE と SET ステートメントです。デフォルト値のない DECLARE ステートメントでは、変換は無視されます。SET ステートメントおよびデフォルト値のある DECLARE ステートメントでは、COMMON TABLE EXPRESSION に変換されます。各共通テーブル式には、ローカル変数値を表す列が含まれます。
Transact-SQL¶
クエリ¶
結果¶
vendor_name |
|---|
Australia Bike Retailer |
Snowflake¶
クエリ¶
結果¶
VENDOR_NAME |
|---|
Australia Bike Retailer |
If/Elseステートメントの変換¶
If/Elseステートメントはさまざまな方法で処理できます。クエリ内で条件を許可するselect内で CASE EXPRESSION を使用して、JavaScriptまたは SQL に変換できます。JavaScript変換は非常に簡単ですが、Caseステートメントは一見するとそれほど明白ではないかもしれません。
Transact-SQL¶
クエリ¶
結果¶
has_active_flag |
|---|
NO |
Snowflake¶
クエリ¶
結果¶
HAS_ACTIVE_FLAG |
|---|
NO |
ネストされたステートメント¶
For nested statements, the structured programming is being transformed to a single query. The statements in the control-of-flow are going to be nested in table structures to preserve the execution order.
注釈
CASE EXPRESSIONS はステートメントごとに1つの値しか返せません
例¶
注釈
どちらのプログラミングパラダイムでも、次のコードは機能的に等価です。
構造化プログラミング¶
SQL¶
結果¶
AccountNumber |
|---|
LITWARE0001 |
SELECTs による条件変数¶
条件ステートメント内での変数定義と割り当ては、やや問題になりがちです。というのも、コードのさらに下にある変数への参照は、その変数が最後に変更された場所を知っていなければならないからです。それだけでなく、参照が別の条件ステートメント内にある場合、その変数への以前の既知の割り当てを参照する何らかのリダイレクトが必要です。
これは、入力コードに見られる入れ子や複雑なクエリによって悪化します。そのため、これらのパターンが見つかった場合は、特定の EWI が追加されます。
次のシナリオでは、最初の IF ステートメントは、内容が十分に単純なので、問題なく変換できます。2番目と3番目の IF ステートメントは、SELECT を通して変数割り当て以外のステートメントがあるため、現時点ではサポートされていないためコメントアウトされています。
SQL Server¶
クエリ¶
結果¶
RESULT |
|---|
10 |
Snowflake¶
クエリ¶
結果¶
RESULT |
|---|
10 |
変数を割り当てて返す¶
In this simple pattern, there is a variable declaration, then, that variable is set using a SELECT statement and finally returned. This is going to be migrated to a Common Table Expression to keep the original behavior.
SQL Server¶
クエリ¶
結果¶
結果 |
|---|
1583978.2263 |
Snowflake¶
クエリ¶
結果¶
RESULT |
|---|
1583978.2263 |
複数の関数呼び出し¶
この特定のパターンでは、明らかなクエリはありませんが、同じ変数に対して複数の関数が呼び出され、最後にその変数が返されます。Snowflakeは関数内でのクエリしかサポートしていないため、このブロックの解決策は、Selectに追加して内部で呼び出しをネストし、戻り値がソース上の値と同じであることを確認することになります。
SQL Server¶
クエリ¶
結果¶
名前 |
|---|
USA Car Retailer |
Snowflake¶
クエリ¶
結果¶
NAME |
|---|
USA Car Retailer |
複数の IF 条件に基づいて変数を増やし、その値を返す¶
このパターンでは、複数の IF 条件を使って変数が変更(この場合は増加)されます。最初に変数のセットが初期化され、結果変数を増やすかどうかを決定するために使用されます。最後に、結果変数が返されます。
SQL Server¶
クエリ¶
結果¶
結果 |
|---|
473.1415 |
Snowflake¶
クエリ¶
結果¶
RESULT |
|---|
473.1415 |
2つ以上の RETURN ステートメント¶
このパターンでは、CASE 式で実行される最後のステートメントのように、コードの流れを断ち切るreturn句を含む IF ブロックが本文の最後に追加されます。
基本ケース¶
この特別なシナリオでは、条件 RETURN ステートメントと最終 RETURN ステートメントの間にロジックがないため、すべての本文は単一の CASE EXPRESSION にマッピングされます。
SQL Server¶
クエリ¶
結果¶
結果 |
|---|
1 |
Snowflake¶
クエリ¶
結果¶
RESULT |
|---|
1 |
共通テーブル式¶
Common table expressions will be kept as in the original code, and they are going to be concatenated with the generated ones. SnowConvert AI is able to identify first all the original COMMON TABLE EXPRESSION names to avoid generating duplicated names.
SQL Server¶
クエリ¶
結果¶
結果 |
|---|
3689 |
Snowflake¶
クエリ¶
結果¶
RESULT |
|---|
3689 |
JavaScript UDFs に変換¶
複数のステートメントがあり、関数がデータベースにアクセスしない場合は、機能の等価性を維持しながら JavaScript 関数に変換できます
SQL Server¶
クエリ1¶
クエリ2¶
結果1¶
DATE |
|---|
2021 |
結果2¶
CleanChargeCode |
|---|
16 |
Snowflake¶
クエリ1¶
クエリ2¶
結果1¶
DATE |
|---|
2021.0 |
結果2¶
CLEANCHARGECODE |
|---|
16 |
既知の問題¶
警告
ユーザー定義関数を使用して、データベースの状態を変更するアクションを実行することはできません
警告
ユーザー定義関数に、テーブルをターゲットとする OUTPUT INTO 句を含めることはできません
警告
ユーザー定義関数は、CURSOR を DECLARE、OPEN、FETCH、CLOSE、DEALLOCATE することはできません。カーソルを使用する必要がある場合は、ストアドプロシージャを使用してください。
警告
ユーザー定義関数は、データベースへの呼び出しが少なくとも1つある場合、WHILE のようなフロー制御ステートメントを実行できません
警告
ストアドプロシージャに変換された他のユーザー定義関数への参照を持つユーザー定義関数も、ストアドプロシージャに変換されます。
警告
User-defined functions that use @@ROWCOUNT are not supported in SQL and should be transformed to stored procedures to keep the functional equivalence.
警告
変数を自分自身に割り当てる SELECT ステートメントを持つユーザー定義関数は、Snowflakeではサポートされていません。SELECT @local_variable もご参照ください
サポートされていないすべてのケースについては、関連する EWIs と以下のパターンを確認して、推奨事項と可能な回避策を入手してください。
クエリに付随するif/elseステートメント以外の条件¶
次のシナリオでは、他のクエリと一緒に「whileステートメント」を使用します。この例の問題点は、メインセレクトの WITH 句の中でwhileステートメントを CTE に変換する方法がないことです。このため、同じロジックを維持するために、このステートメントを JavaScript プロシージャに変換せざるを得ません。
SQL Server¶
クエリ¶
結果¶
結果 |
|---|
1007 |
Snowflake
クエリ¶
結果¶
FOO |
|---|
1007 |
行セットを反復処理して、独自の値を使用して変数を割り当てる¶
In the following example, the variable @names is used to concatenate multiple values from a column into one single string. The variable is updated on each iteration as shown, which is not supported by Snowflake UDFs. For this scenario, the function should be transformed into a procedure.
SQL Server
クエリ¶
結果¶
名前 |
|---|
Australia Bike Retailer Allenson Cycles Advanced Bicycles Trikes, Inc.Morgan Bike Accessories Cycling Master Chicago Rent-All Greenwood Athletic Company Compete Enterprises, Inc International Light Speed Training Systems Gardner Touring Cycles Internati |
Snowflakeクエリ
警告
上記のシナリオについて、以下の制限を考慮してください。
SELECT、INSERT、DELETE、UPDATE、MERGEなどの DML クエリ内でのユーザー定義関数の呼び出しはすべて失敗します。これらのクエリ内でのストアドプロシージャの呼び出しは許可されていないためです。プロシージャの内部でユーザー定義関数を呼び出す場合は、その前に
CALLキーワードを付ける必要があります。User-defined functions used in COMPUTED COLUMNS will fail during the execution.
関連 EWIs¶
SSC-EWI-0067: UDF がSnowflakeプロシージャに変換され、クエリ内でのプロシージャの呼び出しがサポートされていません。
SSC-EWI-0068 :ユーザー定義関数がSnowflakeプロシージャに変換されました。
SSC-EWI-0073: 機能同等性レビュー保留中。
Snowflakeスクリプト UDF ( SCALAR )¶
SQL Serverスカラーユーザー定義関数から Snowflakeスクリプト UDFs への翻訳リファレンス。
Applies to
SQL Server
Azure Synapse Analytics
説明¶
SnowConvert は、すべての関数をストアドプロシージャに変換するのではなく、特定の条件を満たす場合に SQL Serverスカラーユーザー定義関数を直接 Snowflakeスクリプト UDFs ( SnowScript UDFs )に変換することをサポートしています。
Snowflakeスクリプト UDFs は、Snowflakeのプロシージャ言語構文(Snowscript)を使用して、 SQL UDF 本文内に記述されるユーザー定義関数です。変数、ループ、条件付きロジック、例外処理をサポートしています。
関数が SnowScript UDFs になる場合¶
SnowConvert は、各 SQL Server関数を分析し、適切なSnowflakeターゲットを自動的に決定します。関数は、データアクセス操作のないプロシージャロジック のみ を含む場合に、 SnowScript UDF になります。
サンプルソースパターン¶
単純な計算関数¶
データのクエリを行わずに計算を行う基本的なスカラー関数。
SQL Server¶
結果¶
利益 |
|---|
50.00 |
Snowflake( SnowScript UDF )¶
結果¶
PROFIT |
|---|
50.00 |
条件付きロジックを持つ関数( IF/ELSE )¶
ビジネスロジックに IF/ELSE ステートメントを使用する関数。
SQL Server¶
結果¶
DiscountRate |
|---|
0.20 |
Snowflake( SnowScript UDF )¶
結果¶
DISCOUNTRATE |
|---|
0.20 |
WHILE ループを持つ関数¶
反復計算に WHILE ループを使用する関数。
SQL Server¶
結果¶
FactorialResult |
|---|
120 |
Snowflake( SnowScript UDF )¶
結果¶
FACTORIALRESULT |
|---|
120 |
文字列操作関数¶
ループや条件付きロジックを使用する複雑な文字列操作。
SQL Server¶
結果¶
CleanPhone |
|---|
5551234567 |
Snowflake( SnowScript UDF )¶
結果¶
CLEANPHONE |
|---|
5551234567 |
CASE ステートメントロジック¶
CASE 式を使用して分類を行う関数。
SQL Server¶
結果¶
グレード |
|---|
B |
Snowflake( SnowScript UDF )¶
結果¶
GRADE |
|---|
B |
Select Into variable assignment¶
Functions using simple select into for variable assignment.
SQL Server¶
結果¶
CALCULATEPRICE(100, 3) |
|---|
285 |
Snowflake( SnowScript UDF )¶
結果¶
CALCULATEPRICE(100, 3) |
|---|
285 |
既知の問題¶
警告
SnowConvert AI will not translate UDFs containing the following elements into SnowScripting UDFs, as these features are unsupported in SnowScripting UDFs:
データベーステーブルにアクセスする
カーソルを使用する
他の UDFs を呼び出す
集計またはウィンドウ関数を含む
DML 操作を実行する( INSERT/UPDATE/DELETE )
結果セットを返す
関連 EWIs¶
SSC-EWI-0067: UDF がSnowflakeプロシージャに変換され、クエリ内でのプロシージャの呼び出しがサポートされていません。
SSC-EWI-0068 :ユーザー定義関数がSnowflakeプロシージャに変換されました。
SSC-EWI-0073: 機能同等性レビュー保留中。