Я создал тип, содержащий целочисленный список, который можно использовать в запросах. Мне нужно написать предложение where в параметре списка, и если список пуст, мне нужно получить все. Ниже находится sql.

DROP TYPE  dbo.integer_list_tbltype 
GO
CREATE TYPE integer_list_tbltype AS TABLE (n int NOT NULL PRIMARY KEY)
GRANT EXECUTE ON TYPE::integer_list_tbltype TO public

GO 

DECLARE @listvalues  dbo.integer_list_tbltype 
INSERT INTO @listvalues values  (3),(4)

CREATE TABLE #MyTable (a INT  NOT NULL)

INSERT #MyTable (a) VALUES (2),(3),(4)

Select * from #MyTable
  Where a in (select n from @listvalues)

go 
DROP TABLE  #MyTable
go
--DROP TYPE integer_list_tbltype

Итак, мне нужно получить 2,3,4, если @listvalues ​​имеет значение null, как мне отформатировать свой запрос?

0
Greens 31 Май 2013 в 00:40

1 ответ

Лучший ответ

Добавьте условие, чтобы проверить, пуста ли ваша табличная переменная. Это не будет null, и попытка сравнить @listvalues ​​с null приведет к ошибке, потому что он обрабатывается как таблица, а не как переменная.

Select * from #MyTable
  Where a in (select n from @listvalues)
  Or (select count(*) from @listvalues) = 0
0
Esoteric Screen Name 31 Май 2013 в 00:48
Почему я получаю сообщение «Необходимо объявить скалярную переменную @listvalues»? Если я добавляю @listValues ​​Is NULL?
 – 
Greens
31 Май 2013 в 00:48
См. исправленный ответ, пожалуйста
 – 
Esoteric Screen Name
31 Май 2013 в 00:48