2009-10-05 14 views

Odpowiedz

7

Ustawienie wartości domyślnej parametru procedury składowanej spowoduje, że będzie ona opcjonalna.

Edycja:

TWORZENIE PROC [EDURE] [właściciela. ]
nazwa_czynnika [; liczba]
[{@parameter data_type}
[ZMIENNA] [= domyślnie] [WYJŚCIE]
] [, ... n]

domyślny

jest wartość domyślna parametru. Jeśli zdefiniowano wartość domyślną, procedura może zostać wykonana bez podania wartości tego parametru dla wartości . Wartość domyślna musi być stała lub może mieć wartość NULL. Może zawierać znaki wieloznaczne (%, _, [] i [^]), jeśli procedura używa parametru ze słowem kluczowym LIKE.

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

3

Tak. Lista „opcjonalne” parametry na końcu listy parametrów i nadać im wartość domyślną (zazwyczaj jest pusta):

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

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

END 
+0

@Joel: Czy trzeba mieć parametry opcjonalne ku końcowi? Myślę, że lepiej zrobić to z punktu widzenia użyteczności. Czy to prawda? – shahkalpesh

+0

Nie, ale zdecydowanie jest to najlepsza praktyka. –

14

Podczas tworzenia procedurę przechowywaną, utwórz go jak ten

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

-- Your code here 

GO 

Param1 jest obowiązkowe

Param2 jest opcjonalny

+0

Dziękuję Raj. To było łatwe –

0

Pomijając radość SQL injection, że kod przyniesie, tak można. Można ustawić wartości domyślne dla parametrów

CREATE PROCEDURE DoStuff @param1 varchar(20) = null 

Następnie wewnątrz procedury przechowywanej

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

można ustawić wartość domyślną być cokolwiek chcesz.

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

-- PUT YOUR DYNAMIC SQL HERE 

GO 

Aby połączyć

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

Note1: Dynamiczny SQL = SQL Injection

+0

"Dynamiczny SQL = SQL Injection" niekoniecznie jest prawdą. To zależy, czy użyjesz wartości podanych przez użytkownika do zbudowania dynamicznego ciągu SQL, czy nie. Można łatwo zbudować dynamiczny ciąg SQL oparty wyłącznie na logice w procedurze przechowywanej, a następnie przekazać dostarczone przez użytkownika wartości do instrukcji dynamicznej za pomocą parametrów.Kod OP byłby otwarty na iniekcję SQL, ale nie wszystkie Dynamic SQL. – nicko

Powiązane problemy