안녕하세요. 가입해서 첫 질문을 드립니다. 문법이 서투르다보니... 좀 헤깔리네요...
Table 반환 함수를 만드려고 합니다.
Parameter를 받아서 특정 테이블을 조회해서 반환하는 내용입니다.
입력된 파라미터가 null 이거나 '' (blank) 인 경우와 정상인 경우를 구분해서 리턴하려고 합니다.
간단한 샘플 부탁드려도 될까요?
CREATE OR ALTER FUNCTION [dbo].[FN_TEST_SAMPLE]
(
@I_INPUT_STR1 VARCHAR(100)
)
RETURNS TABLE
AS
RETURN
(
-- @I_INPUT_STR1 이 null 이거나 '' 일 경우
-- select '' as result1, '' as result2
-- @I_INPUT_STR1 이 정상 문자일 경우
-- select result1, result2 from test_tb where key_value = @I_INPUT_STR1
)
위와 같은 형태 입니다. 문법이 헤깔려서 구현이 느리네요. 고수님의 첨언지도 부탁드립니다. ^^
Comment 7
-
이리
2019.01.04 11:32
-
난나야78
2019.01.04 12:36
USE [BIDB]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOIF OBJECT_ID(N'dbo.FN_TEST_SAMPLE', N'IF') IS NOT NULLDROP FUNCTION dbo.FN_TEST_SAMPLE;GOCREATE FUNCTION dbo.FN_TEST_SAMPLE(@I_INPUT_STR1 VARCHAR(100))RETURNS TABLEASRETURN(IF ISNULL(@I_INPUT_STR1,'')=''BEGINSELECT ''ENDELSESELECT GETDATE()END)GO메시지 156, 수준 15, 상태 1, 프로시저 FN_TEST_SAMPLE, 줄 11 [배치 시작 줄 12]Incorrect syntax near the keyword 'IF'.메시지 102, 수준 15, 상태 1, 프로시저 FN_TEST_SAMPLE, 줄 18 [배치 시작 줄 12]Incorrect syntax near ')'.문법이 뭔가가 틀린거 같습니다. ㅜ.ㅜ -
건우아빠
2019.01.04 13:06
ELSE 다음 BEGIN이 빠져서 에러인듯..
-
난나야78
2019.01.04 13:15
IF OBJECT_ID(N'dbo.FN_TEST_SAMPLE', N'IF') IS NOT NULLDROP FUNCTION dbo.FN_TEST_SAMPLE;GOCREATE OR ALTER FUNCTION [dbo].[FN_TEST_SAMPLE](@I_INPUT_STR1 VARCHAR(100))RETURNS TABLEASRETURN(IF ISNULL(@I_INPUT_STR1, '') = ''BEGINSELECT '' AS DTENDELSEBEGINSELECT GETDATE() AS DTEND)메시지 156, 수준 15, 상태 1, 프로시저 FN_TEST_SAMPLE, 줄 13 [배치 시작 줄 12]Incorrect syntax near the keyword 'IF'.메시지 102, 수준 15, 상태 1, 프로시저 FN_TEST_SAMPLE, 줄 27 [배치 시작 줄 12]Incorrect syntax near ')'.IF 에 빨간줄~@I_INPUT_STR1 에 빨간줄 입니다. ㅜ.ㅜ내용인즉...'IF' 근처의 구문이 잘못되었습니다. 필요 '(', SELECT 또는 WITH.스칼라 변수 "@I_INPUT_STR1"을(를) 선언해야 합니다.라고 두군데 풍선 안내가 뜹니다. -
이리
2019.01.04 13:32
IF 문이 안되나 보네요..
SELECT CASE WHEN ISNULL(@I_INPUT_STR1, '') = '' THEN '' ELSE GETDATE() END AS DT
-
난나야78
2019.01.04 13:41
답변 감사합 니다. ^^
일단 IF 는 RETURN() 안에서는 안되더라구요. () 안에서는 SELECT QUERY 만 가능한 것 같습니다.
원래의 취지는... 파라미터 별로... 다른 형태의 QUERY를 실행하고자 했던 것인데...
제 욕심대로는 좀 어려울것 같고... RETURN TABLE AS 형태가 아닌 RETURN될 COLUMN TYPE을 지정해주고 나서
BEGIN END 안에서 IF를 써야 할 것으로 보입니다.
친절한 답변 다시한번 감사드립니다. ^^
-
건우아빠
2019.01.05 00:47
CREATE OR ALTER FUNCTION [dbo].[FN_TEST_SAMPLE](@I_INPUT_STR1 VARCHAR(100))RETURNS @Strings TABLE(txt varchar(10))ASBEGINIF ISNULL(@I_INPUT_STR1, '') = ''BEGININSERT @StringsSELECT '' AS DTENDELSEBEGININSERT @StringsSELECT CONVERT(VARCHAR(10) , GETDATE() ,110) AS DTENDRETURNEND
IF ISNULL(@I_INPUT_STR1, '') = ''
BEGIN
SELECT ....
END
ELSE
BEGIN
SELECT ....
END