SnowConvert: Transactクエリ¶
SELECT¶
Applies to
[x] SQL Server
[x] Azure Synapse Analytics
注釈
複数の結果セットが仮テーブルに返されます
説明¶
Snowflake SQL はストアドプロシージャの返される型としてテーブルを返すことをサポートしていますが、Transact SQL と異なり、Snowflakeは同じプロシージャで複数の結果セットを返すことをサポートしていません。このシナリオでは、すべてのクエリ IDs が仮テーブルに格納され、配列として返されます。
サンプルソースパターン¶
次の例は、プロシージャに SELECT ステートメントが1つしかない場合の変換の詳細です。
Transact-SQL ¶
CREATE PROCEDURE SOMEPROC()
AS
BEGIN
SELECT * from AdventureWorks.HumanResources.Department;
END
DepartmentID |
名前 |
GroupName |
---|---|---|
1 |
エンジニアリング |
研究開発 |
2 |
ツールデザイン |
研究開発 |
3 |
販売 |
セールス&マーケティング |
4 |
マーケティング |
セールス&マーケティング |
5 |
購買 |
在庫管理 |
6 |
研究開発 |
研究開発 |
7 |
実稼働 |
製造 |
8 |
生産管理 |
製造 |
9 |
人事 |
経営全般および管理 |
10 |
ファイナンス |
経営全般および管理 |
11 |
情報サービス |
経営全般および管理 |
12 |
ドキュメント管理 |
品質保証 |
13 |
品質保証 |
品質保証 |
14 |
施設とメンテナンス |
経営全般および管理 |
15 |
出荷と入荷 |
在庫管理 |
16 |
経営 |
経営全般および管理 |
Snowflake SQL ¶
CREATE OR REPLACE PROCEDURE SOMEPROC ()
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
ProcedureResultSet RESULTSET;
BEGIN
ProcedureResultSet := (
SELECT
*
from
AdventureWorks.HumanResources.Department);
RETURN TABLE(ProcedureResultSet);
END;
$$;
DepartmentID |
名前 |
GroupName |
---|---|---|
1 |
エンジニアリング |
研究開発 |
2 |
ツールデザイン |
研究開発 |
3 |
販売 |
セールス&マーケティング |
4 |
マーケティング |
セールス&マーケティング |
5 |
購買 |
在庫管理 |
6 |
研究開発 |
研究開発 |
7 |
実稼働 |
製造 |
8 |
生産管理 |
製造 |
9 |
人事 |
経営全般および管理 |
10 |
ファイナンス |
経営全般および管理 |
11 |
情報サービス |
経営全般および管理 |
12 |
ドキュメント管理 |
品質保証 |
13 |
品質保証 |
品質保証 |
14 |
施設とメンテナンス |
経営全般および管理 |
15 |
出荷と入荷 |
在庫管理 |
16 |
経営 |
経営全般および管理 |
次の例は、プロシージャ内に SELECT ステートメントが多数ある場合の変換の詳細です。
Transact-SQL ¶
CREATE PROCEDURE SOMEPROC()
AS
BEGIN
SELECT * from AdventureWorks.HumanResources.Department;
SELECT * from AdventureWorks.HumanResources.Shift;
END
DepartmentID |
名前 |
GroupName |
---|---|---|
1 |
エンジニアリング |
研究開発 |
2 |
ツールデザイン |
研究開発 |
3 |
販売 |
セールス&マーケティング |
4 |
マーケティング |
セールス&マーケティング |
5 |
購買 |
在庫管理 |
6 |
研究開発 |
研究開発 |
7 |
実稼働 |
製造 |
8 |
生産管理 |
製造 |
9 |
人事 |
経営全般および管理 |
10 |
ファイナンス |
経営全般および管理 |
11 |
情報サービス |
経営全般および管理 |
12 |
ドキュメント管理 |
品質保証 |
13 |
品質保証 |
品質保証 |
14 |
施設とメンテナンス |
経営全般および管理 |
15 |
出荷と入荷 |
在庫管理 |
16 |
経営 |
経営全般および管理 |
ShiftID |
名前 |
StartTime |
EndTime |
ModifiedDate |
---|---|---|---|---|
1 |
日 |
07:00:00 |
15:00:00 |
2008-04-30 00:00:00.000 |
2 |
夕方 |
15:00:00 |
23:00:00 |
2008-04-30 00:00:00.000 |
3 |
夜 |
23:00:00 |
07:00:00 |
2008-04-30 00:00:00.000 |
Snowflake SQL ¶
CREATE OR REPLACE PROCEDURE SOMEPROC ()
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
ProcedureResultSet1 VARCHAR;
ProcedureResultSet2 VARCHAR;
return_arr ARRAY := array_construct();
BEGIN
ProcedureResultSet1 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet1) AS
SELECT
*
from
AdventureWorks.HumanResources.Department;
return_arr := array_append(return_arr, :ProcedureResultSet1);
ProcedureResultSet2 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet2) AS
SELECT
*
from
AdventureWorks.HumanResources.Shift;
return_arr := array_append(return_arr, :ProcedureResultSet2);
--** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
RETURN return_arr;
END;
$$;
DepartmentID |
名前 |
GroupName |
---|---|---|
1 |
エンジニアリング |
研究開発 |
2 |
ツールデザイン |
研究開発 |
3 |
販売 |
セールス&マーケティング |
4 |
マーケティング |
セールス&マーケティング |
5 |
購買 |
在庫管理 |
6 |
研究開発 |
研究開発 |
7 |
実稼働 |
製造 |
8 |
生産管理 |
製造 |
9 |
人事 |
経営全般および管理 |
10 |
ファイナンス |
経営全般および管理 |
11 |
情報サービス |
経営全般および管理 |
12 |
ドキュメント管理 |
品質保証 |
13 |
品質保証 |
品質保証 |
14 |
施設とメンテナンス |
経営全般および管理 |
15 |
出荷と入荷 |
在庫管理 |
16 |
経営 |
経営全般および管理 |
ShiftID |
名前 |
StartTime |
EndTime |
ModifiedDate |
---|---|---|---|---|
1 |
日 |
07:00:00 |
15:00:00 |
2008-04-30 00:00:00.000 |
2 |
夕方 |
15:00:00 |
23:00:00 |
2008-04-30 00:00:00.000 |
3 |
夜 |
23:00:00 |
07:00:00 |
2008-04-30 00:00:00.000 |
既知の問題¶
クエリ結果は、ストアドプロシージャが返す IDs を使用してアクセスする必要があります
TOP¶
Applies to
[x] SQL Server
[x] Azure Synapse Analytics
説明¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
クエリ結果セットで返される行を、指定した行数またはパーセンテージに制限します。ORDER BY
句で TOP
を使用すると、結果セットは順序付けられた最初の N 行に制限されます。そうでない場合、 TOP
は、最初の _ N _ 行数を、未定義の順番で返します。この句を使用して、 SELECT
ステートメントから返される行数を指定します。また、 INSERT
、 UPDATE
、 MERGE
、 DELETE
ステートメントの影響を受ける行を指定するには、 TOP
を使用します。(Transact-SQL TOP ドキュメント)
Transact-SQL の構文¶
TOP (expression) [PERCENT] [ WITH TIES ]
注釈
TOP
引数の詳細情報については、 Transact-SQL TOP ドキュメント をご覧ください。
Snowflakeの構文¶
TOP <n>
注釈
TOP
引数の詳細情報については、 Snowflake TOP ドキュメント を参照してください。
サンプルソースパターン¶
以下のサンプルを正しく実行するには、次の CREATE TABLE
ステートメントを実行する必要があります。
CREATE TABLE Cars(
Model VARCHAR(15),
Price MONEY,
Color VARCHAR(10)
);
INSERT Cars VALUES ('sedan', 10000, 'red'),
('convertible', 15000, 'blue'),
('coupe', 20000, 'red'),
('van', 8000, 'blue'),
('sub', 8000, 'green');
CREATE OR REPLACE TABLE Cars (
Model VARCHAR(15),
Price NUMBER(38, 4),
Color VARCHAR(10)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
INSERT INTO Cars VALUES ('sedan', 10000, 'red'),
('convertible', 15000, 'blue'),
('coupe', 20000, 'red'),
('van', 8000, 'blue'),
('sub', 8000, 'green');
一般的なケース¶
Transact-SQL¶
SELECT TOP(1) Model, Color, Price
FROM Cars
WHERE Color = 'red'
Model | Color | Price
--------------------------
sedan | red | 10000.0000
Snowflake¶
SELECT
TOP 1
Model,
Color,
Price
FROM
Cars
WHERE
Color = 'red';
MODEL COLOR PRICE
sedan red 10,000
PERCENT を使用した TOP¶
Transact-SQL¶
SELECT TOP(50)PERCENT Model, Color, Price FROM Cars
Model | Color | Prices
-----------------------------------
sedan | red | 10000.0000
convertible | blue | 15000.0000
coupe | green | 20000.0000
Snowflake¶
SELECT
TOP 50 !!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
Model,
Color,
Price
FROM
Cars;
MODEL COLOR PRICE
sedan red 10,000
convertible blue 15,000
coupe red 20,000
van blue 8,000
sub green 8,000
警告
PERCENT
引数はSnowflakeではサポートされていないため、 TOP
句から削除されています。そのため、Snowflakeでクエリを実行した結果はTransact-SQL と同等ではありません。
TOP WITH TIES¶
Transact-SQL¶
SELECT TOP(50)PERCENT WITH TIES Model, Color, Price FROM Cars ORDER BY Price;
Model | Color | Price
-------------------------------
van | blue | 8000.0000
sub | green | 8000.0000
sedan | red | 10000.0000
Snowflake¶
SELECT
TOP 50 !!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
Model,
Color,
Price
FROM
Cars
ORDER BY Price;
MODEL COLOR PRICE
sub green 8,000
van blue 8,000
sedan red 10,000
convertible blue 15,000
coupe red 20,000
警告
WITH TIES
引数はSnowflakeではサポートされていないため、 TOP
句から削除されています。そのため、Snowflakeでクエリを実行した結果はTransact-SQL と同等ではありません。
既知の問題¶
1.PERCENT 引数はSnowflakeではサポートされていません¶
PERCENT
引数はSnowflakeではサポートされていないため、 TOP
句から削除され、警告が追加されます。結果における機能的等価性の不一致が起こる可能性があります。
2.WITH TIES 引数はSnowflakeではサポートされていません¶
WITH TIES
引数はSnowflakeではサポートされていないため、 TOP
句から削除され、警告が追加されます。結果における機能的等価性の不一致が起こる可能性があります。
関連 EWIs¶
SSC-EWI-0040: ステートメントがサポートされていません。