SnowConvert AI - SQL Server-Azure Synapse - SELECT

SELECT

Transact-SQL의 프로시저 내부에 있는 SELECT 문에 대한 변환 참조

Applies to
  • SQL 서버

  • 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
  • SQL 서버

  • 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 문을 실행해야 합니다.

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
결과

모델

Color

Price

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
결과

모델

Color

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

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;
Copy
결과

모델

Color

Price

van

blue

8000.0000

sub

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

sub

green

8,000

van

blue

8,000

sedan

red

10,000

convertible

blue

15,000

coupe

red

20,000

경고

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: 문은 지원되지 않습니다.