#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
выражение даже