使用带有SET子句的In子句

时间:2016-06-01 16:28:37

标签: sql-server

我正在使用Declare / Set子句来简化查询。其中一个领域包括多个部门。有时,我可能想要限制一个department_id,有时我想要多个部门。是否可以将@dept设置为包含多个部门ID?

declare @enddate datetime, @startdate datetime, @dxstartdate datetime, @dxenddate datetime,@ageanchor datetime,@activestart datetime, @activeend datetime, @dept numeric (18,0)

SET @enddate='2016-05-31' 
SET @startdate = '2015-06-01' 
SET @dxstartdate = '2015-06-01'
SET @dxenddate = '2016-05-31'
SET @ageanchor = '2016-05-31'
SET @activestart = '2014-06-01'
SET @activeend = '2016-05-31'
***SET @dept = in "dept1', 'dept2' ???(What do I put here?)***

1 个答案:

答案 0 :(得分:0)

一种选择是将@dept设置为VARCHAR(MAX),以便您可以接纳任意数量的部门。然后,SET @dept = 'dept1,dept2,dept3'。现在,您有一个以逗号分隔的列表变量,您可以将其拆分为一列,并在代码中添加JOIN。首先,您需要一个函数将此逗号分隔列表转换为表格。请参阅:How to validate a comma separated string using array in SQL我发布了一个函数来执行此操作,除非您使用的是SQL 2016,在这种情况下,您可以使用STRING_SPLIT()。无论哪种方式,您最终都会在INNER JOIN语句中使用SELECT部分的一系列部门来过滤您的数据。