首页 > 解决方案 > 来自变量的 IN 子句

问题描述

我有以下代码允许在 IN 子句中使用变量:

    DECLARE @Ids varchar(50);
    SET @Ids = '24,25';

    SELECT * 
    FROM table
    WHERE ','+@Ids+',' LIKE '%,'+CONVERT(VARCHAR(50),id_field)+',%';

由于@Ids 是一个可以为空的可选字段,我将如何修改代码以使其包含

    (@Ids IS NULL OR id_field = @Ids)

标签: sqlsql-servertsql

解决方案


几乎是你已经拥有的(为了可读性添加了括号

WHERE (@Ids IS NULL) OR (','+@Ids+',' LIKE '%,'+CONVERT(VARCHAR(50),id_field)+',%')

在旁注中确实意识到像这样的查询会绕过id_field可能存在的任何索引,并将执行表扫描以查找匹配项。


推荐阅读