2012-08-22 28 views
0

我有以下查询。表变量和在SQL Server中检查为空

CREATE TYPE [dbo].[DeptIdList] AS TABLE(
    [DepartmentId] [smallint] NULL 
) 
GO 
set nocount on 

declare @department_ids DeptIdList 
declare @tableContainsRecords int = 0 

insert into @department_ids 
values 
(5), (6), (7), (8), (9) 

select d.DepartmentID, d.Name, d.GroupName 
    from HumanResources.Department as d 
    right outer join @department_ids as di on 
    d.DepartmentID = di.DepartmentID 

如果@department_ids包含行,我想选择特定部门;如果不是SELECT应该返回部门表中的所有记录。

什么是最简单和最佳的方式来做到这一点?

回答

1

这应该工作:

SELECT d.DepartmentID, d.Name, d.GroupName 
FROM HumanResources.Department d 
WHERE DepartmentID IN (SELECT DepartmentID FROM @department_ids) 
OR (SELECT COUNT(*) FROM @department_ids) = 0