SnowConvert AI - SQL Server - CREATE FUNCTION¶
Transact-SQL 사용자 정의 함수에 대한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
설명¶
SQL 서버는 두 가지 유형의 사용자 정의 함수 만 지원합니다.
이러한 UDFs 타입 사용하여 내부 논리에 따라 단순 및 복합** 으로 세분화할 수 있습니다.
단순 UDFs는 SQL Server 구문을 Snowflake 구문과 일치시킵니다. 이 유형은 논리를 추가하지 않으며 결과로 바로 이동합니다. 이는 일반적으로 Snowflake의 SQL UDFs와 일치합니다. SnowConvert는 특정 기준을 충족하는 경우 SQL Server 스칼라 사용자 정의 함수를 Snowflake Scripting UDFs로 직접 변환하도록 지원합니다.\ \ 복합 UDFs는 특정 문(INSERT, DELETE, UPDATE, SET, DECLARE 등) 또는 control-of-flow 블록(IF…ELSE, WHILE 등)을 포괄적으로 사용하고 일반적으로 Snowflake의 SQL UDFs 정의에 대한 불일치나 위반을 나타냅니다.
제한 사항¶
Transact UDFs 에는 다른 데이터베이스 엔진(Oracle 및 Tera데이터 등)에는 없는 몇 가지 제한 사항이 있습니다. 이러한 제한은 실패 범위를 좁혀 변환에 도움이 됩니다. 즉, 피해야 할 특정 시나리오가 있습니다.
SQL 서버의 UDFs 에 적용되는 몇 가지 제한 사항은 다음과 같습니다
UDFs 는 데이터베이스 상태를 수정하는 작업을 수행하는 데 사용할 수 없습니다
사용자 정의 함수에는 테이블을 대상으로 하는 OUTPUT INTO 절을 포함할 수 없습니다
사용자 정의 함수는 여러 결과 세트를 반환할 수 없습니다. 여러 결과 세트를 반환해야 하는 경우 저장 프로시저를 사용합니다.
전체 목록은 이 링크 사용자 정의 함수 생성(데이터베이스 엔진)에서 확인할 수 있습니다
INLINE TABLE-VALUED¶
TABLE 반환 유형이 있는 Transact-SQL UDF(사용자 정의 함수)를 Snowflake로 변환하기 위한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
설명¶
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
인라인 테이블-값 함수는 매개 변수를 받고 SELECT 문을 수행하며 TABLE (SQL Server Language Reference 인라인 테이블 값 함수 만들기) 을 반환합니다.
Transact 구문¶
Snowflake SQL 구문¶
샘플 소스 패턴¶
다음 섹션에서는 이러한 종류의 CREATE FUNCTION 구문에 나타날 수 있는 모든 가능한 소스 코드 패턴에 대해 설명합니다.
인라인 테이블-값 함수의 경우 본문당 1개의 문만 존재할 수 있습니다.
SELECT문WITH일반적인 테이블 식
1개의 테이블에서 직접 선택 및 반환 값 가져오기¶
가장 간단한 시나리오로, 테이블에서 간단한 선택을 수행하고 해당 값을 반환합니다
Transact-SQL¶
인라인 테이블 값¶
결과¶
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¶
인라인 테이블 값¶
결과¶
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¶
인라인 테이블 값¶
결과¶
PersonType |
FirstName |
JobTitle |
성별 |
HIREYEAR |
|---|---|---|---|---|
EM |
Ken |
최고 경영자 |
M |
2009 |
EM |
Terri |
엔지니어링 담당 부사장 |
F |
2008 |
EM |
Roberto |
엔지니어링 관리자 |
M |
2007 |
EM |
Rob |
선임 도구 디자이너 |
M |
2007 |
EM |
Gail |
설계 엔지니어 |
F |
2008 |
EM |
Jossef |
설계 엔지니어 |
M |
2008 |
EM |
Dylan |
연구 개발 관리자 |
M |
2009 |
EM |
Diane |
연구 개발 엔지니어 |
F |
2008 |
EM |
Gigi |
연구 개발 엔지니어 |
F |
2009 |
EM |
Michael |
연구 개발 관리자 |
M |
2009 |
EM |
Ovidiu |
선임 도구 디자이너 |
M |
2010 |
EM |
Thierry |
도구 디자이너 |
M |
2007 |
EM |
Janice |
도구 디자이너 |
F |
2010 |
EM |
Michael |
선임 설계 엔지니어 |
M |
2010 |
EM |
Sharon |
설계 엔지니어 |
F |
2011 |
EM |
David |
마케팅 관리자 |
M |
2007 |
EM |
Kevin |
마케팅 도우미 |
M |
2007 |
EM |
John |
마케팅 전문가 |
M |
2011 |
EM |
Mary |
마케팅 도우미 |
F |
2011 |
EM |
Wanida |
마케팅 도우미 |
F |
2011 |
Snowflake SQL¶
인라인 테이블 값¶
결과¶
PersonType |
FirstName |
JobTitle |
성별 |
HIREYEAR |
|---|---|---|---|---|
EM |
Ken |
최고 경영자 |
M |
2009 |
EM |
Terri |
엔지니어링 담당 부사장 |
F |
2008 |
EM |
Roberto |
엔지니어링 관리자 |
M |
2007 |
EM |
Rob |
선임 도구 디자이너 |
M |
2007 |
EM |
Gail |
설계 엔지니어 |
F |
2008 |
EM |
Jossef |
설계 엔지니어 |
M |
2008 |
EM |
Dylan |
연구 개발 관리자 |
M |
2009 |
EM |
Diane |
연구 개발 엔지니어 |
F |
2008 |
EM |
Gigi |
연구 개발 엔지니어 |
F |
2009 |
EM |
Michael |
연구 개발 관리자 |
M |
2009 |
EM |
Ovidiu |
선임 도구 디자이너 |
M |
2010 |
EM |
Thierry |
도구 디자이너 |
M |
2007 |
EM |
Janice |
도구 디자이너 |
F |
2010 |
EM |
Michael |
선임 설계 엔지니어 |
M |
2010 |
EM |
Sharon |
설계 엔지니어 |
F |
2011 |
EM |
David |
마케팅 관리자 |
M |
2007 |
EM |
Kevin |
마케팅 도우미 |
M |
2007 |
EM |
John |
마케팅 전문가 |
M |
2011 |
EM |
Mary |
마케팅 도우미 |
F |
2011 |
EM |
Wanida |
마케팅 도우미 |
F |
2011 |
WITH 문을 사용한 열 선택¶
인라인 테이블 값 함수의 본문은 아래와 같이 WITH 문을 사용하여 지정할 수도 있습니다.
Transact-SQL¶
인라인 테이블 값¶
결과¶
MaritalStatus |
성별 |
이름 |
|---|---|---|
S |
F |
Terri Duffy |
M |
F |
Gail Erickson |
S |
F |
Diane Margheim |
M |
F |
Gigi Matthew |
M |
F |
Janice Galvin |
M |
F |
Sharon Salavaria |
S |
F |
Mary Dempsey |
M |
F |
Wanida Benshoof |
M |
F |
Mary Gibson |
M |
F |
Jill Williams |
S |
F |
Jo Brown |
M |
F |
Britta Simon |
M |
F |
Margie Shoop |
M |
F |
Rebecca Laszlo |
M |
F |
Suchitra Mohan |
M |
F |
Kim Abercrombie |
S |
F |
JoLynn Dobney |
M |
F |
Nancy Anderson |
M |
F |
Ruth Ellerbrock |
M |
F |
Doris Hartwig |
M |
F |
Diane Glimp |
M |
F |
Bonnie Kearney |
M |
F |
Denise Smith |
S |
F |
Diane Tibbott |
M |
F |
Carole Poland |
M |
F |
Carol Philips |
M |
F |
Merav Netz |
S |
F |
Betsy Stadick |
S |
F |
Danielle Tiedt |
S |
F |
Kimberly Zimmerman |
M |
F |
Elizabeth Keyser |
M |
F |
Mary Baker |
M |
F |
Alice Ciccu |
M |
F |
Linda Moschell |
S |
F |
Angela Barbariol |
S |
F |
Kitti Lertpiriyasuwat |
S |
F |
Susan Eaton |
S |
F |
Kim Ralls |
M |
F |
Nicole Holliday |
S |
F |
Anibal Sousa |
M |
F |
Samantha Smith |
S |
F |
Olinda Turner |
S |
F |
Cynthia Randall |
M |
F |
Sandra Reátegui Alayo |
S |
F |
Linda Randall |
S |
F |
Shelley Dyck |
S |
F |
Laura Steele |
S |
F |
Susan Metters |
S |
F |
Katie McAskill-White |
M |
F |
Barbara Decker |
M |
F |
Yvonne McKay |
S |
F |
Janeth Esteves |
M |
F |
Brenda Diaz |
M |
F |
Lorraine Nay |
M |
F |
Paula Nartker |
S |
F |
Lori Kane |
M |
F |
Kathie Flood |
S |
F |
Belinda Newman |
M |
F |
Karen Berge |
M |
F |
Lori Penor |
M |
F |
Jo Berry |
M |
F |
Laura Norman |
M |
F |
Paula Barreto de Mattos |
M |
F |
Mindy Martin |
M |
F |
Deborah Poe |
S |
F |
Candy Spoon |
M |
F |
Barbara Moreland |
M |
F |
Janet Sheperdigian |
S |
F |
Wendy Kahn |
S |
F |
Sheela Word |
M |
F |
Linda Meisner |
S |
F |
Erin Hagens |
M |
F |
Annette Hill |
S |
F |
Jean Trenary |
S |
F |
Stephanie Conroy |
S |
F |
Karen Berg |
M |
F |
Janaina Bueno |
M |
F |
Linda Mitchell |
S |
F |
Jillian Carson |
S |
F |
Pamela Ansman-Wolfe |
S |
F |
Lynn Tsoflias |
M |
F |
Amy Alberts |
S |
F |
Rachel Valdez |
M |
F |
Jae Pak |
Snowflake SQL¶
인라인 테이블 값¶
결과¶
MaritalStatus |
성별 |
이름 |
|---|---|---|
S |
F |
Terri Duffy |
M |
F |
Gail Erickson |
S |
F |
Diane Margheim |
M |
F |
Gigi Matthew |
M |
F |
Janice Galvin |
M |
F |
Sharon Salavaria |
S |
F |
Mary Dempsey |
M |
F |
Wanida Benshoof |
M |
F |
Mary Gibson |
M |
F |
Jill Williams |
S |
F |
Jo Brown |
M |
F |
Britta Simon |
M |
F |
Margie Shoop |
M |
F |
Rebecca Laszlo |
M |
F |
Suchitra Mohan |
M |
F |
Kim Abercrombie |
S |
F |
JoLynn Dobney |
M |
F |
Nancy Anderson |
M |
F |
Ruth Ellerbrock |
M |
F |
Doris Hartwig |
M |
F |
Diane Glimp |
M |
F |
Bonnie Kearney |
M |
F |
Denise Smith |
S |
F |
Diane Tibbott |
M |
F |
Carole Poland |
M |
F |
Carol Philips |
M |
F |
Merav Netz |
S |
F |
Betsy Stadick |
S |
F |
Danielle Tiedt |
S |
F |
Kimberly Zimmerman |
M |
F |
Elizabeth Keyser |
M |
F |
Mary Baker |
M |
F |
Alice Ciccu |
M |
F |
Linda Moschell |
S |
F |
Angela Barbariol |
S |
F |
Kitti Lertpiriyasuwat |
S |
F |
Susan Eaton |
S |
F |
Kim Ralls |
M |
F |
Nicole Holliday |
S |
F |
Anibal Sousa |
M |
F |
Samantha Smith |
S |
F |
Olinda Turner |
S |
F |
Cynthia Randall |
M |
F |
Sandra Reátegui Alayo |
S |
F |
Linda Randall |
S |
F |
Shelley Dyck |
S |
F |
Laura Steele |
S |
F |
Susan Metters |
S |
F |
Katie McAskill-White |
M |
F |
Barbara Decker |
M |
F |
Yvonne McKay |
S |
F |
Janeth Esteves |
M |
F |
Brenda Diaz |
M |
F |
Lorraine Nay |
M |
F |
Paula Nartker |
S |
F |
Lori Kane |
M |
F |
Kathie Flood |
S |
F |
Belinda Newman |
M |
F |
Karen Berge |
M |
F |
Lori Penor |
M |
F |
Jo Berry |
M |
F |
Laura Norman |
M |
F |
Paula Barreto de Mattos |
M |
F |
Mindy Martin |
M |
F |
Deborah Poe |
S |
F |
Candy Spoon |
M |
F |
Barbara Moreland |
M |
F |
Janet Sheperdigian |
S |
F |
Wendy Kahn |
S |
F |
Sheela Word |
M |
F |
Linda Meisner |
S |
F |
Erin Hagens |
M |
F |
Annette Hill |
S |
F |
Jean Trenary |
S |
F |
Stephanie Conroy |
S |
F |
Karen Berg |
M |
F |
Janaina Bueno |
M |
F |
Linda Mitchell |
S |
F |
Jillian Carson |
S |
F |
Pamela Ansman-Wolfe |
S |
F |
Lynn Tsoflias |
M |
F |
Amy Alberts |
S |
F |
Rachel Valdez |
M |
F |
Jae Pak |
알려진 문제¶
발견된 문제 없음
MULTI-STATEMENT TABLE-VALUED¶
TABLE 반환 유형이 있는 Transact-SQL UDF(사용자 정의 함수)를 Snowflake로 변환하기 위한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
참고
이 페이지의 모든 코드 샘플은 아직 SnowConvert AI에서 구현되지 않았습니다. 각 시나리오를 Snowflake로 변환하는 방법에 대한 참조로 해석되어야 합니다. 이러한 변환은 향후 변경될 수 있습니다. 출력 코드의 일부는 명확성을 위해 생략되었습니다.
설명¶
다중 문 테이블 값은 인라인 문 테이블 값(INLINE TABLE-VALUED)과 비슷합니다. 그러나 다중 문 테이블 값은 함수 본문에 둘 이상의 문이 있을 수 있으며, 테이블 열은 반환 유형으로 지정되고 BEGIN/END 블록이 있습니다(다중 문 테이블 값 함수를 생성하는 SQL Server 언어 참조.
Transact-SQL 구문¶
Snowflake SQL¶
샘플 소스 패턴¶
다음 섹션에서는 이러한 종류의 ofCREATE FUNCTION 구문에 나타날 수 있는 가능한 모든 소스 코드 패턴에 대해 설명합니다.
다중 문 테이블-값 함수의 함수 본문은 SELECT 문이어야 합니다. 따라서 다른 문은 별도로 호출해야 합니다.
테이블에 값 삽입¶
테이블에 1개 이상의 행을 삽입하고 새 값으로 테이블을 반환합니다
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
BEHAVIORAL_SEGMENT |
|---|
알 수 없음 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
BEHAVIORAL_SEGMENT |
|---|
알 수 없음 |
If/else 문에 따른 값 삽입¶
조건에 따라 테이블에 행을 삽입하고 새 값으로 테이블을 반환합니다
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
NUMBER_TYPE |
|---|
Odd |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
NUMBER_TYPE |
|---|
Odd |
If/else 문에 따라 여러 개를 삽입합니다¶
아래 예제는 테이블에 2개 이상의 값을 삽입하고 조건에 따라 2개 이상의 변수를 수정했습니다. 새 값으로 테이블을 반환합니다
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
ID_EMPLOYEE |
WORKING_FROM_HOME |
TEAM |
COMPUTER |
|---|---|---|---|
123456789 |
1 |
TEAM_1 |
LAPTOP |
Snowflake¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
ID_EMPLOYEE |
WORKING_FROM_HOME |
TEAM |
COMPUTER |
|---|---|---|---|
123456789 |
1 |
TEAM_1 |
LAPTOP |
경고
문이 중첩되어 있고 문에서 2개 이상의 변수가 수정되는 경우 저장 프로시저를 사용해야 합니다.
이전에 삽입한 값 업데이트¶
테이블의 열 값을 함수 본문으로 업데이트하고 새 값으로 반환합니다.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
DEPARTMENT_NAME |
FIRST_NAME |
LAST_NAME |
START_DATE |
END_DATE |
JOB_TITLE |
MONTHS_WORKING |
|---|---|---|---|---|---|---|
Sales |
Syed |
Abbas |
2013-03-14 |
NULL |
Pacific Sales Manager |
106 |
프로덕션 |
Kim |
Abercrombie |
2010-01-16 |
NULL |
Production Technician - WC60 |
144 |
품질 보증 |
Hazem |
Abolrous |
2009-02-28 |
NULL |
Quality Assurance Manager |
155 |
배송 및 수령 |
Pilar |
Ackerman |
2009-01-02 |
NULL |
Shipping and Receiving Supervisor |
156 |
프로덕션 |
Jay |
Adams |
2009-03-05 |
NULL |
Production Technician - WC60 |
154 |
정보 서비스 |
François |
Ajenstat |
2009-01-17 |
NULL |
Database Administrator |
156 |
Sales |
Amy |
Alberts |
2012-04-16 |
NULL |
European Sales Manager |
117 |
프로덕션 |
Greg |
Alderson |
2008-12-02 |
NULL |
Production Technician - WC45 |
157 |
품질 보증 |
Sean |
Alexander |
2008-12-28 |
NULL |
Quality Assurance Technician |
157 |
시설 및 유지 관리 |
Gary |
Altman |
2009-12-02 |
NULL |
Facilities Manager |
145 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
DEPARTMENT_NAME |
FIRST_NAME |
LAST_NAME |
START_DATE |
END_DATE |
JOB_TITLE |
MONTHS_WORKING |
|---|---|---|---|---|---|---|
Sales |
Syed |
Abbas |
2013-03-14 |
NULL |
Pacific Sales Manager |
106 |
프로덕션 |
Kim |
Abercrombie |
2010-01-16 |
NULL |
Production Technician - WC60 |
144 |
품질 보증 |
Hazem |
Abolrous |
2009-02-28 |
NULL |
Quality Assurance Manager |
155 |
배송 및 수령 |
Pilar |
Ackerman |
2009-01-02 |
NULL |
Shipping and Receiving Supervisor |
156 |
프로덕션 |
Jay |
Adams |
2009-03-05 |
NULL |
Production Technician - WC60 |
154 |
정보 서비스 |
François |
Ajenstat |
2009-01-17 |
NULL |
Database Administrator |
156 |
Sales |
Amy |
Alberts |
2012-04-16 |
NULL |
European Sales Manager |
117 |
프로덕션 |
Greg |
Alderson |
2008-12-02 |
NULL |
Production Technician - WC45 |
157 |
품질 보증 |
Sean |
Alexander |
2008-12-28 |
NULL |
Quality Assurance Technician |
157 |
시설 및 유지 관리 |
Gary |
Altman |
2009-12-02 |
NULL |
Facilities Manager |
145 |
여러 반환 절¶
다음 샘플에는 반환 절이 2개 이상 있는데, 이는 상황에 따라 전체 함수를 계속 실행할 필요가 없기 때문입니다.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
TYPE |
NAME |
|---|---|
SMALL_TEAM |
TEAM1 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
TYPE |
NAME |
|---|---|
SMALL_TEAM |
TEAM1 |
경고
이 변환은 삽입할 값이 하나만 있을 때 적용되며, 값이 2개 이상인 경우 저장 프로시저를 사용해야 합니다.
복잡한 케이스¶
이 예는 중첩된 if 문을 사용하고 실제 조건에 따라 값을 삽입하는 복잡한 경우입니다.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
VACATION_STATUS |
|---|
OK |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
Second Tab¶
VACATION_STATUS |
|---|
OK |
Known Issues¶
쿼리와 함께 문이 있는 동안¶
이 예제의 문제점은 메인 select의 WITH 절 내에서 while 문을 CTE 로 변환할 방법이 없기 때문에 동일한 논리를 유지하기 위해 이 문을 저장 프로시저로 변환해야 한다는 것입니다.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
GROUP_NAME |
|---|
도구 설계 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
GROUP_NAME |
|---|
도구 설계 |
커서 선언하기¶
사용자 정의 함수는 DECLARE, OPEN, FETCH, CLOSE 또는 DEALLOCATE a CURSOR 가 아니어야 합니다. 커서로 작업하려면 저장 프로시저를 사용합니다.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
AMOUNT |
|---|
3 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
AMOUNT |
|---|
3 |
공통 테이블 식에서는 다른 문이 지원되지 않습니다¶
UPDATE, INSERT, DELETE, ALTER 또는 DROP절은 구분 기호를 사용하여 선언한 후에도 일반 테이블 식의 본문에서 지원되지 않습니다. 따라서 함수를 저장 프로시저로 작동하도록 수정할 수 있습니다.
Transact-SQL¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
PRODUCT_NAME |
Rating |
|---|---|
HL Mountain Pedal |
3 |
Mountain Bike Socks, M |
5 |
Road-550-W Yellow, 40 |
5 |
Snowflake SQL¶
MULTI-STATEMENT TABLE-VALUED¶
결과¶
PRODUCT_NAME |
Rating |
|---|---|
HL Mountain Pedal |
3 |
Mountain Bike Socks, M |
5 |
Road-550-W Yellow, 40 |
5 |
관련 EWIs¶
SSC-EWI-0040: 문이 지원되지 않습니다.
SSC-EWI-0073: 보류 중 함수 동등성 검토
SCALAR¶
스칼라 반환 유형이 있는 Transact-SQL UDF(사용자 정의 함수)를 Snowflake로 변환하기 위한 변환 참조
Applies to
SQL 서버
Azure 시냅스 분석
설명¶
참고
출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.
스칼라 사용자 정의 함수는 매개 변수를 수락하고, 복잡한 계산과 같은 작업을 수행하고, 해당 작업의 결과를 스칼라 값으로 반환하는 Transact-SQL 또는 CLR(공용 언어 런타임) 루틴입니다. (SQL Server 언어 ReferenceCREATE FUNCTION 하위 섹션).
참고
이러한 함수는 일반적으로 SELECT 문 또는 단일 변수 설정(대부분 저장 프로시저 내부) 내에서 사용됩니다.
Transact-SQL 구문¶
Snowflake 구문¶
Snowflake는 사용자 정의 함수에서 3가지 언어를 지원합니다.
SQL
JavaScript
Java
현재, SnowConvert AI는 SQL 및 JavaScript만 대상 언어로 지원합니다.
SQL¶
참고
SQL 사용자 정의 함수는 본문으로 1개의 쿼리만 지원합니다. 데이터베이스에서 읽을 수는 있지만 쓰거나 수정할 수는 없습니다. (Scalar SQL UDFs Reference).
JavaScript¶
참고
JavaScript 사용자 정의 함수는 본문에서 여러 문을 허용하지만 데이터베이스 쿼리를 수행할 수는 없습니다. (Scalar JavaScript UDFs Reference)
샘플 소스 패턴¶
문 설정 및 선언하기¶
함수 본문에서 가장 일반적인 문은DECLARE및SET문입니다. 기본값이 없는 DECLARE 문의 경우 변환이 무시됩니다. 기본값이 있는 SET 문과 DECLARE 문은 COMMON TABLE EXPRESSION. 로 변환됩니다. 각 공통 테이블 식에는 로컬 변수 값을 나타내는 열이 포함됩니다.
Transact-SQL¶
쿼리¶
결과¶
vendor_name |
|---|
Australia Bike Retailer |
Snowflake¶
쿼리¶
결과¶
VENDOR_NAME |
|---|
Australia Bike Retailer |
If/Else 문 변환¶
If/Else 문은 다른 방식으로 처리할 수 있는데, 자바스크립트로 변환하거나 쿼리 내부의 조건문을 허용하는 선택 내부의 CASE EXPRESSION 를 사용하여 SQL 로 변환할 수 있지만, 자바스크립트 변환은 매우 간단하지만 Case 문은 언뜻 보기에 그렇게 명확하지 않을 수 있습니다.
Transact-SQL¶
쿼리¶
결과¶
has_active_flag |
|---|
NO |
Snowflake¶
쿼리¶
결과¶
HAS_ACTIVE_FLAG |
|---|
NO |
중첩된 문¶
For nested statements, the structured programming is being transformed to a single query. The statements in the control-of-flow are going to be nested in table structures to preserve the execution order.
참고
CASE EXPRESSIONS 은 문당 1개의 값만 반환할 수 있습니다
예¶
참고
두 프로그래밍 패러다임의 다음 코드는 기능적으로 동일합니다.
정형 프로그래밍¶
SQL¶
결과¶
AccountNumber |
|---|
LITWARE0001 |
SELECTs 를 통한 조건부 변수¶
조건문 내에서 변수를 정의하고 할당하는 것은 코드 아래쪽에서 변수를 참조할 때 변수가 마지막으로 수정된 위치를 알아야 하므로 다소 문제가 되는 경향이 있습니다. 뿐만 아니라 참조가 다른 조건문 내에 있는 경우 이전에 알려진 변수에 대한 할당을 참조하는 일종의 리디렉션이 있어야 합니다.
이러한 모든 상황은 입력 코드에서 찾을 수 있는 중첩 및 복잡한 쿼리로 인해 악화됩니다. 그렇기 때문에 이러한 패턴이 발견되면 특정 EWI가 추가됩니다.
다음 시나리오에서 첫 번째 IF 문은 내용이 충분히 간단하기 때문에 문제 없이 변환할 수 있습니다. 두 번째와 세 번째 IF 문은 SELECT 를 통한 변수 할당 이외의 문이 있기 때문에 현재 지원되지 않으므로 설명이 생략되었습니다.
SQL 서버¶
쿼리¶
결과¶
RESULT |
|---|
10 |
Snowflake¶
쿼리¶
결과¶
RESULT |
|---|
10 |
변수 할당 및 반환¶
In this simple pattern, there is a variable declaration, then, that variable is set using a SELECT statement and finally returned. This is going to be migrated to a Common Table Expression to keep the original behavior.
SQL 서버¶
쿼리¶
결과¶
결과 |
|---|
1583978.2263 |
Snowflake¶
쿼리¶
결과¶
RESULT |
|---|
1583978.2263 |
다중 함수 호출¶
이 특정 패턴의 경우 명백한 쿼리는 없지만 동일한 변수에 대해 작업하고 마지막에 반환하는 여러 함수에 대한 호출이 여러 번 있습니다. Snowflake는 함수 내부의 쿼리만 지원하므로 이 블록의 해결책은 Select에 추가하고 내부에 호출을 중첩하여 반환 값이 소스의 반환 값과 동일한지 확인하는 것입니다.
SQL 서버¶
쿼리¶
결과¶
이름 |
|---|
USA Car Retailer |
Snowflake¶
쿼리¶
결과¶
NAME |
|---|
USA Car Retailer |
여러 IF 조건에 따라 변수를 증가시키고 그 값을 반환합니다¶
이 패턴의 경우 여러 IF 조건을 사용하여 변수를 수정(이 경우 증가)합니다. 처음에 변수 세트가 초기화되고 결과 변수를 늘릴지 여부를 결정하는 데 사용됩니다. 마지막으로 결과 변수가 반환됩니다.
SQL 서버¶
쿼리¶
결과¶
결과 |
|---|
473.1415 |
Snowflake¶
쿼리¶
결과¶
RESULT |
|---|
473.1415 |
RETURN 문 2개 이상¶
이 패턴에서는 CASE 식에서 실행되는 마지막 문과 같이 코드 플로우를 끊는 반환 절이 포함된 IF 블록을 본문 끝에 추가합니다.
기본 케이스¶
이 특정 시나리오의 경우 조건부 RETURN 문과 최종 RETURN 문 사이에는 논리가 없으므로 모든 본문이 단일 CASE EXPRESSION 에 매핑됩니다.
SQL 서버¶
쿼리¶
결과¶
결과 |
|---|
1 |
Snowflake¶
쿼리¶
결과¶
RESULT |
|---|
1 |
일반 테이블 식¶
Common table expressions will be kept as in the original code, and they are going to be concatenated with the generated ones. SnowConvert AI is able to identify first all the original COMMON TABLE EXPRESSION names to avoid generating duplicated names.
SQL 서버¶
쿼리¶
결과¶
결과 |
|---|
3689 |
Snowflake¶
쿼리¶
결과¶
RESULT |
|---|
3689 |
JavaScript UDFs 로 변환¶
문이 여러 개 있고 함수가 데이터베이스에 어떤 방식으로도 액세스하지 않는 경우 기능적 동등성을 유지하면서 JavaScript 함수로 변환할 수 있습니다
SQL 서버¶
쿼리 1¶
쿼리 2¶
결과 1¶
DATE |
|---|
2021 |
결과 2¶
CleanChargeCode |
|---|
16 |
Snowflake¶
쿼리 1¶
쿼리 2¶
결과 1¶
DATE |
|---|
2021.0 |
결과 2¶
CLEANCHARGECODE |
|---|
16 |
Known Issues¶
경고
사용자 정의 함수는 데이터베이스 상태를 수정하는 작업을 수행하는 데 사용할 수 없습니다
경고
사용자 정의 함수에는 테이블을 대상으로 하는 OUTPUT INTO 절을 포함할 수 없습니다
경고
사용자 정의 함수는 DECLARE, OPEN, FETCH, CLOSE 또는 DEALLOCATE a CURSOR 가 아니어야 합니다. 커서를 사용해야 하는 경우 저장 프로시저를 사용합니다.
경고
사용자 정의 함수는 데이터베이스에 대한 호출이 1개 이상 있는 경우 WHILE 같은 플로우 제어 문을 수행할 수 없습니다
경고
저장 프로시저로 변환된 다른 사용자 정의 함수에 대한 참조가 있는 사용자 정의 함수도 저장 프로시저로 변환됩니다.
경고
User-defined functions that use @@ROWCOUNT are not supported in SQL and should be transformed to stored procedures to keep the functional equivalence.
경고
변수를 자신에게 할당하는SELECT문이 있는 사용자 정의 함수는 Snowflake에서 지원되지 않습니다. SELECT @local_variable 참조
지원되지 않는 모든 케이스에 대해서는 관련 EWIs 및 아래 패턴을 확인하여 권장 사항과 가능한 해결 방법을 확인하십시오.
쿼리 옆의 if/else 문 이외의 조건문¶
다음 시나리오는 다른 쿼리와 함께 “while 문”을 사용하는 경우입니다. 이 예제의 문제점은 메인 선택의 WITH 절 내에 있는 동안 문을 CTE 으로 변환할 방법이 없기 때문에 동일한 논리를 유지하기 위해 이 문을 JavaScript 프로시저로 변환해야 한다는 것입니다.
SQL 서버¶
쿼리¶
결과¶
결과 |
|---|
1007 |
Snowflake
쿼리¶
결과¶
FOO |
|---|
1007 |
행 집합을 반복하는 자체 값을 사용하여 변수 할당하기¶
In the following example, the variable @names is used to concatenate multiple values from a column into one single string. The variable is updated on each iteration as shown, which is not supported by Snowflake UDFs. For this scenario, the function should be transformed into a procedure.
SQL 서버
쿼리¶
결과¶
names |
|---|
Australia Bike Retailer Allenson Cycles Advanced Bicycles Trikes, Inc. Morgan Bike Accessories Cycling Master Chicago Rent-All Greenwood Athletic Company Compete Enterprises, Inc International Light Speed Training Systems Gardner Touring Cycles Internati |
Snowflake 쿼리
경고
위에서 설명한 시나리오의 경우 다음 제한 사항을 고려하십시오.
SELECT,INSERT,DELETE,UPDATE또는MERGE같은 DML 쿼리에서 사용자 정의 함수에 대한 모든 호출은 이러한 쿼리 내의 저장 프로시저 호출이 허용되지 않으므로 실패합니다.프로시저 내에서 사용자 정의 함수를 호출할 때는
CALL키워드를 앞에 붙여야 합니다.User-defined functions used in COMPUTED COLUMNS will fail during the execution.
관련 EWIs¶
SSC-EWI-0067: UDF 가 Snowflake 프로시저로 변환되었으며, 쿼리 내에서 프로시저를 호출하는 기능은 지원되지 않습니다.
SSC-EWI-0068: 사용자 정의 함수가 Snowflake 프로시저로 변환되었습니다.
SSC-EWI-0073: 보류 중 함수 동등성 검토.
Snowflake 스크립트 UDF(SCALAR)¶
SQL Server 스칼라 사용자 정의 함수에서 [Snowflake Scripting UDFs]로의 변환 참조(/developer-guide/udf/sql/udf-sql-procedural-functions)
Applies to
SQL 서버
Azure 시냅스 분석
설명¶
SnowConvert는 특정 기준을 충족하는 경우 모든 함수를 저장 프로시저로 변환하는 대신 SQL Server 스칼라 사용자 정의 함수를 Snowflake Scripting UDFs(SnowScript UDFs)로 직접 변환하도록 지원합니다.
Snowflake Scripting UDFs는 SQL UDF 본문 내에서 Snowflake의 프로시저 언어 구문(Snowscript)을 사용하여 작성된 사용자 정의 함수입니다. 변수, 루프, 조건부 논리, 예외 처리를 지원합니다.
함수가 SnowScript UDFs가 되는 경우¶
SnowConvert는 각 SQL Server 함수를 분석하고 적절한 Snowflake 대상을 자동으로 결정합니다. 함수는 데이터 액세스 작업 없이 프로시저 논리만 포함하는 경우 SnowScript UDF가 됩니다.
샘플 소스 패턴¶
단순 계산 함수¶
데이터를 쿼리하지 않고 계산을 수행하는 기본 스칼라 함수입니다.
SQL 서버¶
결과¶
Profit |
|---|
50.00 |
Snowflake(SnowScript UDF)¶
결과¶
PROFIT |
|---|
50.00 |
조건부 논리(IF/ELSE)가 있는 함수¶
비즈니스 논리에 대해 IF/ELSE 문을 사용하는 함수입니다.
SQL 서버¶
결과¶
DiscountRate |
|---|
0.20 |
Snowflake(SnowScript UDF)¶
결과¶
DISCOUNTRATE |
|---|
0.20 |
WHILE 루프가 있는 함수¶
반복 계산을 위해 WHILE 루프를 사용하는 함수입니다.
SQL 서버¶
결과¶
FactorialResult |
|---|
120 |
Snowflake(SnowScript UDF)¶
결과¶
FACTORIALRESULT |
|---|
120 |
문자열 조작 함수¶
루프 및 조건부 논리를 사용하는 복잡한 문자열 작업입니다.
SQL 서버¶
결과¶
CleanPhone |
|---|
5551234567 |
Snowflake(SnowScript UDF)¶
결과¶
CLEANPHONE |
|---|
5551234567 |
CASE 문 논리¶
분류를 위해 CASE 식을 사용하는 함수입니다.
SQL 서버¶
결과¶
Grade |
|---|
B |
Snowflake(SnowScript UDF)¶
결과¶
GRADE |
|---|
B |
Select Into variable assignment¶
Functions using simple select into for variable assignment.
SQL 서버¶
결과¶
CALCULATEPRICE(100, 3) |
|---|
285 |
Snowflake(SnowScript UDF)¶
결과¶
CALCULATEPRICE(100, 3) |
|---|
285 |
Known Issues¶
경고
SnowConvert AI will not translate UDFs containing the following elements into SnowScripting UDFs, as these features are unsupported in SnowScripting UDFs:
데이터베이스 테이블 액세스
커서 사용
기타 UDFs 호출
집계 또는 윈도우 함수 포함
DML 작업(INSERT/UPDATE/DELETE) 수행
결과 세트 반환
관련 EWIs¶
SSC-EWI-0067: UDF 가 Snowflake 프로시저로 변환되었으며, 쿼리 내에서 프로시저를 호출하는 기능은 지원되지 않습니다.
SSC-EWI-0068: 사용자 정의 함수가 Snowflake 프로시저로 변환되었습니다.
SSC-EWI-0073: 보류 중 함수 동등성 검토.