我有一个存储过程,它有五个参数。我想把它们包括在如下的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