Проверка параметров хранимой процедуры на наличие непустой строки

#sql #sql-server

#sql #sql-сервер

Вопрос:

Я использую SQL Server 2016.

Это моя хранимая процедура:

 CREATE PROCEDURE usp_Test
    @IGLNO VARCHAR(10) != ''
AS
BEGIN
    SELECT * 
    FROM TABLE 
    WHERE IGLNO = @IGLNO
END
 

Здесь вместо жесткого кодирования !='' я пытаюсь использовать параметр @IGLNO с заданной по умолчанию NOT NULL или непустой строкой.

Можем ли мы сделать что-то подобное в SQL?

Комментарии:

1. Вы можете установить значение параметра по умолчанию на случай, если для параметра что-то не передано. Если вы хотите использовать какое-либо значение, если передается значение null или empty, вы можете использовать оператор Case в вашем предложении Where или вы можете использовать оператор if, чтобы не выполнять запрос, если параметр null или empty . Зависит от того, что вы хотите вернуть, если в процедуру передан нулевой или пустой параметр

2. Если значение по умолчанию не равно null, а не » тогда что это?

3. @Dale K, у меня был точно такой же вопрос! Подумав об этом, я решил, что это любая допустимая строка… что заставило меня подумать о совпадении с шаблоном, что привело меня к `НРАВИТСЯ»_%».

Ответ №1:

Используйте оператор LIKE для сопоставления с шаблоном.

'_%' соответствует строке, содержащей хотя бы один символ. Это исключит пустые строки, а также нули.

'%' будет включать пустые строки, но исключать нули.

 CREATE PROCEDURE usp_Test
    @IGLNO VARCHAR(10) = '_%'
AS
BEGIN
    SELECT * FROM TABLE WHERE IGLNO LIKE @IGLNO
END
 

Ответ №2:

Попробуйте CASE Stmt:

 CREATE PROCEDURE usp_Test
@IGLNO VARCHAR(10)
AS
BEGIN
SELECT * FROM TABLE WHERE IGLNO = CASE WHEN @IGLNO='' THEN IGLNO ELSE @IGLNO END
END
 

Комментарии:

1. case выражение даже