0

我创建了一个包含可用于查询的整数列表的类型。我需要在列表参数上写一个 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 ,如何格式化我的查询?

4

1 回答 1

0

添加条件以检查您的表变量是否为空。它不会为 null,并且尝试将 @listvalues 与 null 进行比较会产生错误,因为它被视为表,而不是变量。

Select * from #MyTable
  Where a in (select n from @listvalues)
  Or (select count(*) from @listvalues) = 0
于 2013-05-30T20:42:28.590 回答