SnowConvert AI - SQL サーバーとAzure Synapse - SELECT

SELECT

Transact-SQL のプロシージャ内の SELECT ステートメントの翻訳リファレンス。

Applies to
  • SQL Server

  • 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
  • SQL Server

  • 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 ステートメントを実行する必要があります。

Transact-SQL

 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
Snowflake
 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
結果

モデル

価格

sedan

red

10000.0000

Snowflake
クエリ
 SELECT
TOP 1
Model,
Color,
Price
FROM
Cars
WHERE
Color = 'red';
Copy
結果

MODEL

COLOR

PRICE

sedan

red

10,000

PERCENT を使用した TOP

Transact-SQL
クエリ
 SELECT TOP(50)PERCENT Model, Color, Price FROM Cars
Copy
結果

モデル

Prices

sedan

red

10000.0000

convertible

blue

15000.0000

coupe

green

20000.0000

Snowflake
クエリ
SELECT
TOP 50 !!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE 'TOP PERCENT' CLAUSE 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

サブ

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;
Copy
結果

モデル

価格

van

blue

8000.0000

サブ

green

8000.0000

sedan

red

10000.0000

Snowflake
クエリ
 SELECT
 TOP 50 !!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE 'TOP PERCENT AND WITH TIES' CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
  Model,
  Color,
  Price
 FROM
  Cars
 ORDER BY Price;
Copy
結果

MODEL

COLOR

PRICE

サブ

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

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