2009-10-05 23 views

cevap

7

Saklı yordam parametresine bir varsayılan değer sağlamak onu isteğe bağlı hale getirecektir.

DÜZENLEME:

PROC [EDURE] [sahibi CREATE. ]
procedure_name [; sayı]
[{@parameter veri_türü}
[DEĞİŞEN] [= varsayılan] [ÇIKTI]
] [, ... n]

parametresinin varsayılan değeri

varsayılan. Bir varsayılan tanımlanırsa, prosedürü, bu parametre için değeri belirtilmeksizin yürütülebilir. Varsayılan bir sabit olmalı veya NULL olabilir. Prosedür LIKE anahtar sözcüğü ile parametre kullanıyorsa joker karakterleri (%, _, [] ve [^]) içerebilir.

bakınız

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

3

Evet. Saklı yordamı oluşturduğunuzda

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

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

END 
+0

@Joel: o sonlarına doğru, isteğe bağlı parametreleri sahip olmak gerekli mi? Bence, kullanılabilirlik bakış açısından bunu yapmak daha iyidir. Bu doğru mu? – shahkalpesh

+0

Hayır, ama kesinlikle en iyi uygulama. –

14

, bu

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

-- Your code here 

GO 

Param1 gibi oluşturun edilir: Liste parametre listesinin sonunda "isteğe bağlı" parametreleri ve onlara bir varsayılan değer (genellikle NULL) vermek zorunlu

Param2 evet yapabilirsiniz, bu kod getirecek SQL enjeksiyon sevinç kenara bırakırsak

+0

Teşekkür ederim Raj. Bu kolay –

0

İsteğe olduğunu. Sen parametreleri

CREATE PROCEDURE DoStuff @param1 varchar(20) = null 

için varsayılan bir değer ayarlayabilirsiniz Sonra saklı yordam

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

içeride İstediğiniz şey olmak varsayılan değer ayarlayabilirsiniz.

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

-- PUT YOUR DYNAMIC SQL HERE 

GO 

aramak için

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

Not 1: Dinamik SQL = SQL Enjeksiyon

+0

oldu "Dinamik SQL = SQL Injection" mutlaka doğru değildir. Dinamik SQL dizginizi oluşturmak için kullanıcı tarafından sağlanan değerleri kullanıp kullanmayacağınıza bağlıdır. Saklı yordamda yalnızca mantık temelinde dinamik bir SQL dizesi oluşturabilir, ardından kullanıcı tarafından sağlanan değerleri parametreler aracılığıyla dinamik ifadeye geçirebilirsiniz.OP'nin kodu SQL enjeksiyona açık olacaktı, ancak tüm Dinamik SQL'ler açık değil. – nicko

İlgili konular