2009-10-05 16 views

risposta

7

Fornire un valore predefinito al parametro della stored procedure lo renderà facoltativo.

EDIT:

CREATE PROC [EDURE] [proprietario. ]
nome_azione [; numero]
[{} @parameter data_type
[VARIABILI] [= default] [OUTPUT]
] [, ... n]

predefinita

è un valore predefinito per il parametro. Se è definito un valore predefinito, la procedura può essere eseguita senza specificare un valore per quel parametro. L'impostazione predefinita deve essere una costante o può essere NULL. Può includere caratteri jolly (%, _, [] e [^]) se la procedura utilizza il parametro con la parola chiave LIKE.

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

3

Sì. Lista dei parametri "facoltativi" alla fine dell'elenco dei parametri e dare loro un valore predefinito (in genere NULL):

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

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

END 
+0

@ Joel: E 'necessario avere i parametri opzionali, verso la fine? Penso che sia meglio farlo dal punto di vista dell'usabilità. È giusto? – shahkalpesh

+0

No, ma è sicuramente una buona pratica. –

14

Quando si crea la stored procedure, creare in questo modo

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

-- Your code here 

GO 

Param1 è obbligatoria

Param2 è opzionale

+0

Grazie, Raj. È stato facile: –

0

Mettendo da parte la gioia SQL injection che il codice porterà, sì è possibile. È possibile impostare un valore di default per i parametri

CREATE PROCEDURE DoStuff @param1 varchar(20) = null 

Poi all'interno della stored procedure

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

È possibile impostare il valore di default di essere qualcosa che ti piace.

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

-- PUT YOUR DYNAMIC SQL HERE 

GO 

Per chiamare

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

Nota 1: SQL dinamico = SQL Injection

+0

"Dynamic SQL = SQL Injection" non è necessariamente vero. Dipende se si utilizzano valori forniti dall'utente per creare o meno la stringa SQL dinamica. È possibile creare facilmente una stringa SQL dinamica basata esclusivamente sulla logica all'interno della stored procedure, quindi passare i valori forniti dall'utente nell'istruzione dinamica tramite parametri.Il codice dell'OP sarebbe stato aperto all'iniezione SQL, ma non tutto l'SQL dinamico è. – nicko

Problemi correlati