我创建了一个包含可在查询中使用的整数列表的Type。我需要在list参数上写一个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
所以如果@listvalues为null,我需要获得2,3,4,如何格式化我的查询?
答案 0 :(得分:0)
添加条件以检查表变量是否为空。它不会为null,并且尝试将@listvalues与null进行比较会产生错误,因为它被视为表,而不是变量。
Select * from #MyTable
Where a in (select n from @listvalues)
Or (select count(*) from @listvalues) = 0