необов'язкові параметри в зберігається процесорі SQL Server?


125

Я пишу кілька збережених програм у SQL Server 2008 і цікавився, чи можлива тут концепція необов’язкових вхідних параметрів?

Я припускаю, що я завжди міг передати NULL для параметрів, які я не хочу використовувати, перевірити значення в збереженому програмі, а потім взяти речі звідти, але мене зацікавило, чи концепція доступна тут. Дякую!


Відповіді:


201

Ви можете заявити так

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

що робити, якщо параметр - тип унікального ідентифікатора? колишній @userId унікальний ідентифікатор
RK Sharma

1
Відповідь на @RKSharma для тих, хто теж задається питанням - він працює так само з унікальними ідентифікаторами.
rinukkusu

55

Так. Оголосити параметр таким чином:

@Sort varchar(50) = NULL

Тепер вам навіть не потрібно передавати параметр дюйму. Він буде за замовчуванням NULL (або те, що ви вибрали за замовчуванням).


Вам навіть не потрібні= NULL
OMG Ponies

3
Ви впевнені, що вам це не потрібно?
Майк Коул

43
OMG Ponies, якщо ви не включаєте = <NULL | деяке значення за замовчуванням>, параметр буде обов'язковим. Ви можете передати його як NULL, але тоді ви просто перекладете цю логіку на додатки, що використовують процедуру.
Аарон Бертран

10
Додавання до точки Аарона. Краще використовувати "= NULL", якщо ви додаєте новий необов'язковий параметр до існуючого збереженого процесору. Причина в тому, що ви, можливо, не знаєте ВСЕ коду, який викликає цю процедуру. Отже, якщо ви не зробите його необов’язковим за допомогою "= NULL", для всіх місць, які ви, можливо, пропустили, щоб передати значення, воно порушиться.
нанонерд

nanonerd: 2014 і вище, принаймні, ви можете встановити типовий засіб, і це буде приймати це, а НЕ помилку, коли ви не передасте цей параметр Принаймні, так це працювало для мене у 2014 році
billpennock

0

2014 і вище, принаймні, ви можете встановити за замовчуванням, і він прийме це, а НЕ помилку, коли ви не передасте цей параметр. Частковий приклад: 3-й параметр додається як необов'язковий. виконати фактичну процедуру лише з першими двома параметрами

exec getlist 47,1,0

create procedure getlist
   @convId int,
   @SortOrder int,
   @contestantsOnly bit = 0
as
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.