SQL Server: необязательная переменная в хранимой процедуре - PullRequest
5 голосов
/ 05 октября 2009

Я хотел бы знать, есть ли в любом случае, я могу установить один из моих параметров хранимой процедуры в качестве необязательного.

IF @thing_id <> ''
BEGIN 
 SET @sFiltre = @sFiltre + ' AND OPERES.OPE_THING = ' +  CONVERT(VARCHAR,@thing_id)
END

Ответы [ 5 ]

14 голосов
/ 05 октября 2009

Когда вы создаете хранимую процедуру, создайте ее следующим образом

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

-- Your code here

GO

Param1 является обязательным

Параметр 2 является необязательным

7 голосов
/ 05 октября 2009

Предоставление значения по умолчанию для параметра хранимой процедуры сделает его необязательным.

РЕДАКТИРОВАТЬ:

CREATE PROC [EDURE] [владелец. ]
имя_процесса [; номер]
[{@parameter data_type}
[VARYING] [= по умолчанию] [OUTPUT]
] [, ... n]

по умолчанию

Значение по умолчанию для параметра. Если задано значение по умолчанию, процедура может быть выполнен без указания значение для этого параметра. По умолчанию должен быть константой или может быть NULL. Может содержать символы подстановки (%, _, [] и [^]), если процедура использует параметр с ключевым словом LIKE.

Пожалуйста, смотрите - http://msdn.microsoft.com/en-us/library/aa258259%28SQL.80%29.aspx

3 голосов
/ 05 октября 2009

Да. Перечислите «необязательные» параметры в конце списка параметров и присвойте им значение по умолчанию (обычно NULL):

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

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

END
0 голосов
/ 05 октября 2009
CREATE PROCEDURE SQL_INJECTION(
@MandatoryA int,
@MandatoryB varchar(50),
@MandatoryC datetime,
@OptionalA varchar(50) = NULL
)
AS

-- PUT YOUR DYNAMIC SQL HERE

GO

Для звонка

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

Примечание 1: динамический SQL = SQL-инъекция

0 голосов
/ 05 октября 2009

Отложив радость SQL-инъекции, которую принесет код, да, вы можете Вы можете установить значение по умолчанию для параметров

CREATE PROCEDURE DoStuff @param1 varchar(20) = null

Тогда внутри хранимой процедуры

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

Вы можете установить значение по умолчанию на любое значение.

...