SQL Server'da isteğe bağlı parametreler depolanıyor mu?


125

SQL Server 2008'de bazı depolanmış procs yazıyorum ve burada isteğe bağlı girdi parametreleri konseptinin mümkün olup olmadığını merak ettim.

Sanırım kullanmak istemediğim parametreler için her zaman NULL geçirebilirim, depolanan işlemdeki değeri kontrol edebilirim, sonra bir şeyler alabilirim, ancak konsept burada mevcutsa ilgilenmiştim. Teşekkürler!


Yanıtlar:


201

Böyle ilan edebilirsin

CREATE PROCEDURE MyProcName
    @Parameter1 INT = 1,
    @Parameter2 VARCHAR (100) = 'StringValue',
    @Parameter3 VARCHAR (100) = NULL
AS

/* check for the NULL / default value (indicating nothing was passed */
if (@Parameter3 IS NULL)
BEGIN
    /* whatever code you desire for a missing parameter*/
    INSERT INTO ........
END

/* and use it in the query as so*/
SELECT *
FROM Table
WHERE Column = @Parameter

ya parametre benzersiz tanımlayıcı tipiyse? ex. @userId uniqueidentifier
RK Sharma

1
@RKSharma'yı da merak eden herkes için yanıtlamak - benzersiz tanımlayıcılarla aynı şekilde çalışır.
rinukkusu

55

Evet öyle. Parametreyi şu şekilde bildirin:

@Sort varchar(50) = NULL

Artık parametreyi içeri aktarmak zorunda bile değilsiniz. Varsayılan olarak NULL olacaktır (veya varsayılan olarak ne seçerseniz seçin).


İhtiyacınız bile yok= NULL
OMG Ponies

3
İhtiyacın olmadığına emin misin?
Mike Cole

43
OMG Ponies, = <NULL | bazı varsayılan değerler> eklemezseniz, parametre gerekli olacaktır. NULL olarak iletebilirsiniz, ancak daha sonra bu mantığı prosedürü kullanan uygulamalara kaydırırsınız.
Aaron Bertrand

10
Aaron'un bakış açısına ekleniyor. Mevcut depolanmış bir proc'a yeni bir isteğe bağlı parametre ekliyorsanız, "= NULL" kullanmak daha iyidir. Bunun nedeni, bu proc'u çağıran TÜM kodun farkında olmayabilirsiniz. Bu nedenle, "= NULL" seçeneğini kullanarak isteğe bağlı yapmadığınız sürece, bir değeri iletmeyi kaçırmış olabileceğiniz tüm yerler için kırılacaktır.
nanonerd

nanonerd: 2014 ve yukarısı en azından bir varsayılan ayarlayabilir ve bu parametreyi geçmediğinizde bunu alır ve hata DEĞİLDİR. En azından 2014'te benim için çalıştı
Billpennock

0

En azından 2014 ve üstü bir varsayılan belirleyebilir ve bu parametreyi geçmediğinizde bunu alır ve hata DEĞİLDİR. Kısmi Örnek: 3. parametre isteğe bağlı olarak eklenir. gerçek prosedürün sadece ilk iki parametre ile çalışması iyi çalıştı

exec getlist 47,1,0

create procedure getlist
   @convId int,
   @SortOrder int,
   @contestantsOnly bit = 0
as
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.