我有一个存储过程有两个可选参数。这两个参数都是逗号分隔的字符串,我想在IN运算符中使用。
假设我有一些像这样的SQL:
@ManagersCommaDelimited VARCHAR(MAX) = NULL,
@EmployeesCommaDelimited VARCHAR(MAX) = NULL
SELECT t1.*, t2.Field1
FROM Table1 t1
LEFT OUTER JOIN Table2 t2 ON t1.id = t2.table1id
WHERE (@ManagersCommaDelimited IS NOT NULL AND t1.ManagerId IN (@ManagersCommaDelimited))
AND (@EmployeesCommaDelimited IS NOT NULL AND t1.EmployeeId IN (@EmployeesCommaDelimited))
如果这些参数中的任何一个为NULL或空格,我想忽略具有IN运算符的部分。
因此,如果ManagersCommaDelimited为NULL,那么我想返回包含所有记录的记录,如果ManagersCommaDelmited不是NULL,那么我想返回仅包含逗号分隔字符串参数中的管理器的记录。
如何在MS SQL中完成此操作?
答案 0 :(得分:0)
如果要与数据子集进行比较,则只能使用IN。
OP解决方案是检查字符串的存在,因此使用CharIndex
https://docs.microsoft.com/en-us/sql/t-sql/functions/charindex-transact-sql
WHERE (ISNULL(@ManagersCommaDelimited, '') <> ''
AND CHARINDEX(@ManagersCommaDelimited, CAST(t1.ManagerId AS varchar(max)) > 0)) --- if there is a match of text then will return the position