SQL Server 저장 프로 시저의 선택적 매개 변수?


125

SQL Server 2008에서 몇 가지 저장된 procs를 작성하고 있는데 여기서 선택적 입력 매개 변수의 개념이 가능한지 궁금하십니까?

사용하고 싶지 않은 매개 변수에 대해 항상 NULL을 전달하고 저장된 proc의 값을 확인한 다음 거기에서 항목을 가져올 수 있다고 가정하지만 여기에서 개념을 사용할 수 있는지 여부에 관심이있었습니다. 감사!


2
Erland의 사이트를 읽어 보면
Aaron Bertrand

답변:


201

다음과 같이 선언 할 수 있습니다.

CREATE PROCEDURE MyProcName
    @Parameter1 INT = 1,
    @Parameter2 VARCHAR (100) = 'StringValue',
    @Parameter3 VARCHAR (100) = NULL
AS

/* check for the NULL / default value (indicating nothing was passed */
if (@Parameter3 IS NULL)
BEGIN
    /* whatever code you desire for a missing parameter*/
    INSERT INTO ........
END

/* and use it in the query as so*/
SELECT *
FROM Table
WHERE Column = @Parameter

매개 변수가 고유 식별자 유형이면 어떻게됩니까? 전의. 고유 식별자 @userId
RK 샤르마에게

1
궁금한 사람을 위해 @RKSharma에 답하는 것도 고유 식별자와 동일하게 작동합니다.
rinukkusu

55

네, 그렇습니다. 다음과 같이 매개 변수를 선언합니다.

@Sort varchar(50) = NULL

이제 매개 변수를 전달할 필요도 없습니다. 기본값은 NULL (또는 기본값으로 선택한 모든 항목)입니다.


당신은 필요도 없습니다= NULL
OMG Ponies

3
필요하지 않습니까?
Mike Cole

43
OMG Ponies, = <NULL | 일부 기본값>을 포함하지 않으면 매개 변수가 필요합니다. NULL로 전달할 수 있지만 해당 논리를 프로 시저를 사용하는 응용 프로그램으로 이동하면됩니다.
Aaron Bertrand

10
Aaron의 요점에 추가합니다. 기존 저장 프로 시저에 새 선택적 매개 변수를 추가하는 경우 "= NULL"을 사용하는 것이 좋습니다. 그 이유는이 proc을 호출하는 모든 코드를 알지 못할 수도 있기 때문입니다. 따라서 "= NULL"을 사용하여 선택적으로 설정하지 않는 한 값을 전달하지 못했을 수있는 모든 위치에 대해 중단됩니다.
nanonerd

nanonerd : 2014 이상은 최소한 기본값을 설정할 수 있으며 해당 매개 변수를 전달하지 않으면 오류가 발생하지 않습니다. 적어도 그것이 2014 년에 저를 위해 일한 방식입니다
billpennock

0

2014 이상은 최소한 기본값을 설정할 수 있으며 해당 매개 변수를 전달하지 않으면 오류가 발생하지 않습니다. 부분 예 : 세 번째 매개 변수는 선택 사항으로 추가됩니다. 처음 두 매개 변수 만 사용하여 실제 절차를 실행하면 제대로 작동했습니다.

exec getlist 47,1,0

create procedure getlist
   @convId int,
   @SortOrder int,
   @contestantsOnly bit = 0
as
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.