기본 매개 변수 값으로 SQL 함수?


105

다음과 같이 기본 매개 변수 값을 변경해 보았습니다.

ALTER PROCEDURE [dbo].[my_sp]
@currentDate datetime = GETDATE()

모든 SQL 사전 컴파일러가 내게 준 모든 오류는 다음과 같습니다.

메시지 102, 수준 15, 상태 1, 프로 시저 my_sp, 줄 8 '('근처에 잘못된 구문이 있습니다.

이미 절차를 만들었습니다. (관련성이 있는지 잘 모르겠습니다.) null 기본값을 사용하고 나중에 확인했지만 적절하지 않은 것 같습니다. 한 줄로 할 수 있습니까?


업데이트 : 저장 프로 시저 매개 변수에 대한 MSDN의 설명에서 벗어났습니다 .

[= default] 매개 변수의 기본값입니다. 기본값이 정의 된 경우 해당 매개 변수에 대한 값을 지정하지 않고 함수를 실행할 수 있습니다.

참고 :
varchar (max) 및 varbinary (max) 데이터 형식을 제외한 CLR 함수에 대해 기본 매개 변수 값을 지정할 수 있습니다.

함수의 매개 변수에 기본값이있는 경우 기본값을 검색하기 위해 함수가 호출 될 때 키워드 DEFAULT를 지정해야합니다. 이 동작은 매개 변수를 생략하면 기본값을 의미하는 저장 프로 시저에서 기본값과 함께 매개 변수를 사용하는 것과 다릅니다.

내가 잘못 읽고 있습니까?

감사합니다.

답변:


160

저장 프로 시저 매개 변수의 기본값은 상수 여야 합니다 . 다음을 수행해야합니다 ...

ALTER Procedure [dbo].[my_sp]
@currentDate datetime = null
AS
IF @currentDate is null
SET @currentDate = getdate()

36
또는 SET @currentDate = COALESCE (@ currentDate, GETDATE ())
SQLMenace

나는 이전에 그것을 사용하고 있었다. "나는 null 기본값을 사용하고 있었고 나중에 확인했지만 적절하지 않은 것 같습니다." 여전히 브라이언에게 감사합니다.
user58044

이 솔루션은 완벽합니다.
R.Katnaan

35

나는 그것이 가능하다고 생각하지 않는다. 리터럴 (상수) 값을 기본값으로 사용해야한다.

그러나 다음과 같이 할 수 있습니다.

Set @currentDate = Coalesce(@currentDate , GetDate())

13

다음과 같이 시도 할 수 있습니다.

Set @CurrentDate=IsNull(@CurrentDate,GetDate())

8

귀하의 예에서 대괄호로 Microsoft SQL Server를 사용하고 있다고 추측합니다.

에서 MSDN :

문자열과 같은 상수 값만; 스칼라 함수 (시스템, 사용자 정의 또는 CLR 함수) 또는 NULL을 기본값으로 사용할 수 있습니다.

이 함수 GETDATE()는 때때로 다른 값을 반환하므로 상수 표현식이 아닙니다.


2

이 값은 결정적이지 않으며 사용할 수 없습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.