SnowConvert: Transact 쿼리

SELECT

Applies to
  • [x] SQL 서버

  • [x] Azure 시냅스 분석

참고

임시 테이블에 여러 결과 세트가 반환됩니다

설명

Snowflake SQL 은 저장 프로시저의 반환 유형으로 테이블 반환을 지원하지만, Transact-SQL 과 달리 동일한 프로시저에서 여러 결과 집합을 반환하는 것은 지원하지 않습니다. 이 시나리오에서는 모든 쿼리 IDs 가 임시 테이블에 저장되고 배열로 반환됩니다.

샘플 소스 패턴

다음 예제에서는 프로시저에 SELECT 문이 하나만 있는 경우의 변환에 대해 자세히 설명합니다.

Transact-SQL

 CREATE PROCEDURE SOMEPROC()
AS
BEGIN
        SELECT * from AdventureWorks.HumanResources.Department;
END
Copy

DepartmentID

이름

GroupName

1

Engineering

연구 및 개발

2

도구 설계

연구 및 개발

3

Sales

영업 및 마케팅

4

마케팅

영업 및 마케팅

5

구매

재고 관리

6

연구 및 개발

연구 및 개발

7

프로덕션

Manufacturing

8

생산 관리

Manufacturing

9

인적 리소스

총괄 관리자 및 관리자

10

Finance

총괄 관리자 및 관리자

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

Engineering

연구 및 개발

2

도구 설계

연구 및 개발

3

Sales

영업 및 마케팅

4

마케팅

영업 및 마케팅

5

구매

재고 관리

6

연구 및 개발

연구 및 개발

7

프로덕션

Manufacturing

8

생산 관리

Manufacturing

9

인적 리소스

총괄 관리자 및 관리자

10

Finance

총괄 관리자 및 관리자

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

Engineering

연구 및 개발

2

도구 설계

연구 및 개발

3

Sales

영업 및 마케팅

4

마케팅

영업 및 마케팅

5

구매

재고 관리

6

연구 및 개발

연구 및 개발

7

프로덕션

Manufacturing

8

생산 관리

Manufacturing

9

인적 리소스

총괄 관리자 및 관리자

10

Finance

총괄 관리자 및 관리자

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

Evening

15:00:00

23:00:00

2008-04-30 00:00:00.000

3

Night

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

Engineering

연구 및 개발

2

도구 설계

연구 및 개발

3

Sales

영업 및 마케팅

4

마케팅

영업 및 마케팅

5

구매

재고 관리

6

연구 및 개발

연구 및 개발

7

프로덕션

Manufacturing

8

생산 관리

Manufacturing

9

인적 리소스

총괄 관리자 및 관리자

10

Finance

총괄 관리자 및 관리자

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

Evening

15:00:00

23:00:00

2008-04-30 00:00:00.000

3

Night

23:00:00

07:00:00

2008-04-30 00:00:00.000

Known Issues

  1. 쿼리 결과는 저장 프로시저가 반환하는 IDs 를 사용하여 액세스해야 합니다

TOP

Applies to
  • [x] SQL 서버

  • [x] Azure 시냅스 분석

설명

참고

출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.

쿼리 결과 세트에서 반환되는 행을 지정된 행 수 또는 행의 백분율로 제한합니다. ORDER BY 절과 함께 TOP 을 사용하는 경우 결과 세트는 정렬된 행의 첫 _N_개로 제한됩니다. 그렇지 않으면 TOP 은 정의되지 않은 순서로 첫 번째 _ N _ 행 수를 반환합니다. 이 절을 사용하여 SELECT 문에서 반환되는 행 수를 지정합니다. 혹은 TOP 를 사용하여 INSERT, UPDATE, MERGE 또는 DELETE 문의 영향을 받는 행을 지정합니다. (Transact-SQL TOP 설명서)

Transact-SQL 의 구문

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

참고

TOP 인자에 대한 자세한 내용은 Transact-SQL TOP 설명서 를 참조하십시오.

Snowflake의 구문
 TOP <n> 
Copy

참고

TOP 인자에 대한 자세한 내용은 Snowflake TOP 설명서 를 참조하십시오.

샘플 소스 패턴

다음 샘플을 올바르게 실행하려면 다음 CREATETABLE 문을 실행해야 합니다.

 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

경고

WITHTIES 인자는 Snowflake에서 지원되지 않기 때문에 TOP 절에서 제거 중이며, 따라서 Snowflake에서 쿼리를 실행한 결과는 Transact-SQL 과 동일하지 않습니다.

Known Issues

1. PERCENT argument is not supported by Snowflake

PERCENT 인자는 Snowflake에서 지원되지 않으므로 TOP 절에서 제거되고 경고가 추가됩니다. 결과의 기능적 동등성 불일치가 발생할 수 있습니다.

2. WITH TIES argument is not supported by Snowflake

WITH TIES 인자는 Snowflake에서 지원되지 않으므로 TOP 절에서 제거되고 경고가 추가됩니다. 결과의 기능적 동등성 불일치가 발생할 수 있습니다.

관련 EWIs

  1. SSC-EWI-0040: 문은 지원되지 않습니다.