어쨌든 저장 프로 시저 매개 변수 중 하나를 선택적으로 설정할 수 있는지 알고 싶습니다.SQL Server : 저장 프로 시저의 선택적 변수
IF @thing_id <> ''
BEGIN
SET @sFiltre = @sFiltre + ' AND OPERES.OPE_THING = ' + CONVERT(VARCHAR,@thing_id)
END
어쨌든 저장 프로 시저 매개 변수 중 하나를 선택적으로 설정할 수 있는지 알고 싶습니다.SQL Server : 저장 프로 시저의 선택적 변수
IF @thing_id <> ''
BEGIN
SET @sFiltre = @sFiltre + ' AND OPERES.OPE_THING = ' + CONVERT(VARCHAR,@thing_id)
END
저장 프로 시저 매개 변수에 기본값을 제공하면 선택 사항입니다.
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예. 저장 프로 시저를 만들 때
CREATE PROCEDURE MyProcedure
@param1 int,
@param2 varchar(200),
@thing_id int = NULL
AS
If @thing_id IS NULL Begin
/* ... */
End
END
는이
Create Proc MyProc
@Param1 VarChar (20),
@Param2 VarChar (20) = NULL
AS
-- Your code here
GO
Param1을처럼 생성됩니다 : 목록 매개 변수 목록의 마지막에있는 "옵션"매개 변수와 그들에게 디폴트 값 (일반적으로 NULL을) 제공 필수
과 Param2 그래 당신이 할 수있는, 그 코드를 가져다 줄 SQL 주입 기쁨을 따로 설정
Raj. 감사합니다. 그건 쉽지. –
선택 사항입니다. 당신은 매개 변수
CREATE PROCEDURE DoStuff @param1 varchar(20) = null
에 대한 기본 값을 설정할 수 있습니다 그런 다음 저장 프로 시저
IF @param1 IS NOT NULL
BEGIN
... Do stuff
END
안에 당신이 좋아하는 것을 할 기본 값을 설정할 수 있습니다.
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 주입
"동적 SQL = SQL 주입"이 반드시 사실 일 필요는 없습니다. 사용자가 제공 한 값을 사용하여 동적 SQL 문자열을 빌드할지 여부에 따라 다릅니다. 스토어드 프로 시저 내의 로직만을 기반으로 동적 SQL 문자열을 쉽게 작성한 다음 사용자 제공 값을 매개 변수를 통해 동적 명령문에 전달할 수 있습니다.OP의 코드는 SQL 삽입에 개방적 이었지만 모든 동적 SQL은 그렇지 않습니다. – nicko
@Joel : 그것은 끝으로, 선택적 매개 변수를 가질 필요가 있습니까? 내 생각에, 유용성의 관점에서 그것을하는 것이 낫습니다. 그게 맞습니까? – shahkalpesh
아니요,하지만 확실히 모범 사례입니다. –