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
Copy

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;
$$;
Copy

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
Copy

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;
$$;
Copy

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

既知の問題

  1. クエリ結果は、ストアドプロシージャが返す IDs を使用してアクセスする必要があります

TOP

Applies to
  • [x] SQL Server

  • [x] Azure Synapse Analytics

説明

注釈

わかりやすくするため、出力コードの一部を省略しています。

クエリ結果セットで返される行を、指定した行数またはパーセンテージに制限します。ORDER BY 句で TOP を使用すると、結果セットは順序付けられた最初の N 行に制限されます。そうでない場合、 TOP は、最初の _ N _ 行数を、未定義の順番で返します。この句を使用して、 SELECT ステートメントから返される行数を指定します。また、 INSERTUPDATEMERGEDELETE ステートメントの影響を受ける行を指定するには、 TOP を使用します。(Transact-SQL TOP ドキュメント)

Transact-SQL の構文

 TOP (expression) [PERCENT] [ WITH TIES ]
Copy

注釈

TOP 引数の詳細情報については、 Transact-SQL TOP ドキュメント をご覧ください。

Snowflakeの構文
 TOP <n> 
Copy

注釈

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');
Copy
 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');
Copy

一般的なケース

Transact-SQL
 SELECT TOP(1) Model, Color, Price
FROM Cars
WHERE Color = 'red'
Copy
Model | Color | Price
--------------------------
sedan |  red  | 10000.0000


Copy
Snowflake
 SELECT
TOP 1
Model,
Color,
Price
FROM
Cars
WHERE
Color = 'red';
Copy
MODEL	COLOR	PRICE
sedan	red	10,000

Copy

PERCENT を使用した TOP

Transact-SQL
 SELECT TOP(50)PERCENT Model, Color, Price FROM Cars
Copy
Model        |  Color  |  Prices
-----------------------------------
sedan        |  red    |  10000.0000
convertible  |  blue   |  15000.0000
coupe        |  green  |  20000.0000

Copy
Snowflake
 SELECT
TOP 50 !!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
Model,
Color,
Price
FROM
Cars;
Copy
MODEL	         COLOR        PRICE
sedan	         red          10,000
convertible      blue         15,000
coupe	         red          20,000
van	         blue         8,000
sub              green        8,000

Copy

警告

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;
Copy
Model  |  Color   | Price
-------------------------------
van    |  blue    | 8000.0000
sub    |  green   | 8000.0000
sedan  |  red     | 10000.0000


Copy
Snowflake
 SELECT
TOP 50 !!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
Model,
Color,
Price
FROM
Cars
ORDER BY Price;
Copy
MODEL	        COLOR	    PRICE
sub	        green	    8,000
van	        blue	    8,000
sedan	        red	    10,000
convertible     blue	    15,000
coupe	        red	    20,000

Copy

警告

WITH TIES 引数はSnowflakeではサポートされていないため、 TOP 句から削除されています。そのため、Snowflakeでクエリを実行した結果はTransact-SQL と同等ではありません。

既知の問題

1.PERCENT 引数はSnowflakeではサポートされていません

PERCENT 引数はSnowflakeではサポートされていないため、 TOP 句から削除され、警告が追加されます。結果における機能的等価性の不一致が起こる可能性があります。

2.WITH TIES 引数はSnowflakeではサポートされていません

WITH TIES 引数はSnowflakeではサポートされていないため、 TOP 句から削除され、警告が追加されます。結果における機能的等価性の不一致が起こる可能性があります。

関連 EWIs

  1. SSC-EWI-0040: ステートメントがサポートされていません。