2009-10-05 2 views

답변

7

저장 프로 시저 매개 변수에 기본값을 제공하면 선택 사항입니다.

EDIT :

가 PROC [EDURE] 소유자를 만들. ]
procedure_name [; 번호]
[{@parameter의 DATA_TYPE}
[VARYING] = 기본] OUTPUT]
], ... N]

매개 변수에 대한 기본값

기본. 기본값이 정의 된 경우 해당 매개 변수에 값을 지정하지 않고 절차 을 실행할 수 있습니다. 기본값 인 은 상수이거나 NULL 일 수 있습니다. 프로 시저에서 LIKE 키워드와 함께 매개 변수를 사용하는 경우 와일드 카드 문자 (%, _, [] 및 [^])를 포함 할 수 있습니다.

참조하십시오

- http://msdn.microsoft.com/en-us/library/aa258259%28SQL.80%29.aspx

3

예. 저장 프로 시저를 만들 때

CREATE PROCEDURE MyProcedure 
    @param1 int, 
    @param2 varchar(200), 
    @thing_id int = NULL 
AS 

    If @thing_id IS NULL Begin 
     /* ... */ 
    End 

END 
+0

@Joel : 그것은 끝으로, 선택적 매개 변수를 가질 필요가 있습니까? 내 생각에, 유용성의 관점에서 그것을하는 것이 낫습니다. 그게 맞습니까? – shahkalpesh

+0

아니요,하지만 확실히 모범 사례입니다. –

14

는이

Create Proc MyProc 
@Param1 VarChar (20), 
@Param2 VarChar (20) = NULL 
AS 

-- Your code here 

GO 

Param1을처럼 생성됩니다 : 목록 매개 변수 목록의 마지막에있는 "옵션"매개 변수와 그들에게 디폴트 값 (일반적으로 NULL을) 제공 필수

과 Param2 그래 당신이 할 수있는, 그 코드를 가져다 줄 SQL 주입 기쁨을 따로 설정

+0

Raj. 감사합니다. 그건 쉽지. –

0

선택 사항입니다. 당신은 매개 변수

CREATE PROCEDURE DoStuff @param1 varchar(20) = null 

에 대한 기본 값을 설정할 수 있습니다 그런 다음 저장 프로 시저

IF @param1 IS NOT NULL 
BEGIN 
    ... Do stuff 
END 

안에 당신이 좋아하는 것을 할 기본 값을 설정할 수 있습니다.

0
CREATE PROCEDURE SQL_INJECTION(
@MandatoryA int, 
@MandatoryB varchar(50), 
@MandatoryC datetime, 
@OptionalA varchar(50) = NULL 
) 
AS 

-- PUT YOUR DYNAMIC SQL HERE 

GO 

를 호출하려면

EXEC dbo.SQL_INJECTION @MandatoryA = 1, @MandatoryB = 'test', @MandatoryC = '2009-10-05', @OptionalA = DEFAULT 

주 : 동적 SQL = SQL 주입

+0

"동적 SQL = SQL 주입"이 반드시 사실 일 필요는 없습니다. 사용자가 제공 한 값을 사용하여 동적 SQL 문자열을 빌드할지 여부에 따라 다릅니다. 스토어드 프로 시저 내의 로직만을 기반으로 동적 SQL 문자열을 쉽게 작성한 다음 사용자 제공 값을 매개 변수를 통해 동적 명령문에 전달할 수 있습니다.OP의 코드는 SQL 삽입에 개방적 이었지만 모든 동적 SQL은 그렇지 않습니다. – nicko