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
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;
$$;
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
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;
$$;
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¶
쿼리 결과는 저장 프로시저가 반환하는 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 ]
참고
TOP
인자에 대한 자세한 내용은 Transact-SQL TOP 설명서 를 참조하십시오.
Snowflake의 구문¶
TOP <n>
참고
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');
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
경고
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¶
SSC-EWI-0040: 문은 지원되지 않습니다.