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
출력¶
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
SQL 서버
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 문을 실행해야 합니다.
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');
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');
일반적인 경우¶
Transact-SQL¶
쿼리¶
SELECT TOP(1) Model, Color, Price
FROM Cars
WHERE Color = 'red'
결과¶
모델 |
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
결과¶
모델 |
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;
결과¶
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;
결과¶
모델 |
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;
결과¶
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: 문은 지원되지 않습니다.