Я создал тип, содержащий целочисленный список, который можно использовать в запросах. Мне нужно написать предложение 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, как мне отформатировать свой запрос?
1 ответ
Добавьте условие, чтобы проверить, пуста ли ваша табличная переменная. Это не будет null, и попытка сравнить @listvalues с null приведет к ошибке, потому что он обрабатывается как таблица, а не как переменная.
Select * from #MyTable
Where a in (select n from @listvalues)
Or (select count(*) from @listvalues) = 0
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.