COALESCE在sql server中的IN条件

时间:2018-04-27 06:11:02

标签: sql-server stored-procedures

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)

1 个答案:

答案 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))