COALESCE用于在条件中使用next not null值。例如 @DOCTOR_NUM 是变量,可以 NULL或包含DOCTOR NUMBER 为此,我们可以像
那样进行用户查询DOCTOR_NUM = COALESCE(@DOCTOR_NUM,DOCTOR_NUM)
所以我们不需要为可选条件生成动态查询。
我的问题是我们可以在IN条件下使用合并。
与@DOCTOR_NUM='123,234,345'
DCOTOR_NUM IN COALESCE(REPLACE(@DOCTOR_NUM,',',''','''),DOCTOR_NUM)
答案 0 :(得分:0)
在执行多个可选过滤器时,您应该尽量避免使用函数或篡改值(或者更好的是,使用动态SQL)。
你不能使用一个简单的变量来保存多个值,你需要一个表(变量与否)。
解决方案符合以下准则:
DECLARE @DOCTOR_NUM VARCHAR(1000) = '123,234,345'
DECLARE @t_SuppliedDoctorNumbers TABLE (DoctorNumber INT)
INSERT INTO @t_SuppliedDoctorNumbers (
DoctorNumber)
SELECT
DoctorNumber = S.Value
FROM
STRING_SPLIT(@DOCTOR_NUM, ',') AS S -- SQL Server 2016+ can use String_Split, many other options for lower versions
WHERE
TRY_PARSE(S.Value AS INT) IS NOT NULL
SELECT
*
FROM
YourTable AS T
WHERE
(@DOCTOR_NUM IS NULL OR
EXISTS (SELECT 'valid doctor number' FROM @t_SuppliedDoctorNumbers AS X WHERE X.DoctorNumber = T.DOCTOR_NUM))