SQL Server中的条件IN子句



我有一个存储过程,它有五个参数。我想把它们包括在如下的where子句中

  • 如果参数不为null,则将其作为in子句包含在查询中

也就是说,参数值可以像"Test"或"Test,Best"等。我正在使用SQL中的函数将这些逗号分隔的值转换为表。

我尝试使用COALESCE(@test,test_column) = test_column,但无法在此处包含IN子句(What-if@test='test,Best'(。

所以,我想做下面提到的

DECLARE @param varchar(max) = 'Test,Best';
Select * from table where CASE when @param is not null then table.column in (@param)

有什么建议吗。

我已经根据您的需求调整了这个答案。

首先创建User-Defined Table type:

CREATE TYPE dbo.ParamsList
AS TABLE
(
Param varchar(50)
);

然后只需在存储过程中使用此参数和其他参数:

CREATE PROCEDURE dbo.DoSomethingWithEmployees
@List AS dbo.ParamsList READONLY
, @param1              INT             = NULL
, @param2              NVARCHAR(150)   = NULL
, @param3              NVARCHAR(150)   = NULL
, @param4              NVARCHAR(150)   = NULL

AS
BEGIN
SET NOCOUNT ON;
SELECT 
* 
FROM YourTable
WHERE YourColumn NOT IN (SELECT Param FROM @List)
END
GO

相关内容

  • 没有找到相关文章

最新更新