2013-03-28 5 views
8
create function Xtest 
(@d1 varchar(3)=null 
,@d2 varchar(3)=null) 
returns table 
as 
return 
with code_list(code_pattern) 
as 
(
    select x.code_pattern 
     from (values (@d1),(@d2)) as x(code_pattern) 
     where x.code_pattern is not null 
),y 
as 
(
    select substring(code,1,3) as code 
     from tblicd 
     where substring(code,1,3) in 
     (
      select * from code_list 
     ) 
) 

select * from y 

은 완전히 완료되면 의미가있는 함수입니다. 이 쿼리를 실행하려고하는데 두 개의 매개 변수를 제공하지 않으면 실패합니다. 저장 프로 시저와 동일한 코드가 있는데 하나의 매개 변수 만 입력하면 잘 작동하고 두 번째 매개 변수 null이 할당됩니다. 매개 변수 값이 저장 프로 시저로 할 수있는 것처럼 제공되지 않으면 null을 매개 변수 값으로 전달할 수있는 방법이 있습니까?매개 변수의 기본값을 테이블 반환 함수에 전달

함수가 컴파일되지 않습니다.

+1

관련하여 적어도 하나는 아마도 속임수입니다. http://stackoverflow.com/questions/3278860/optional-parameter-in-sql-server ... http://stackoverflow.com/questions/12721869/alter -a-sql-server-function-to-accept-new-optional-parameter ... http://stackoverflow.com/questions/8358315/t-sql-function-with-default-parameters –

답변

31

함수를 호출 할 때 매개 변수를 생략 할 수 없습니다. 이 구문에서 잘못하고있는 것은 아니며 SQL Server에서는 지원되지 않습니다. 저장 프로시 듀어에는 선택적 매개 변수가 있지만 기능은 그렇지 않습니다.

당신은, 그러나, 공급 default 수 있습니다 때 또한

SELECT code FROM dbo.Xtest(NULL, NULL); 

please always use the schema prefix (이 경우 dbo.에) :

SELECT code FROM dbo.Xtest(default, default); 

또는이 경우

당신은 기본적으로 당신이 할 수있는 NULL 알고있는 경우 생성 및 참조하는 모든 개체, 특히 함수.

+0

나는 거기에 있어야한다는 것을 알고 있었다. 방법이 되십시오. 왜 sprocs와 TVFs간에 동작이 다른지에 대한 특별한 추론을 알고 있습니까? – wootscootinboogie

+0

@wootscootinboogie 나도 몰라 * 왜 *, 아니, 미안. –

관련 문제