动态SQL:如何将IN转换为多个OR语句

时间:2013-11-19 19:31:43

标签: sql-server sql-server-2008 loops dynamic-sql

目前在SQL Server 2008中我正在创建一个查询:

SET @Query = 'select DISTINCT d.* from Device d ';

if @SerialNumbers <> ''
   SET @Query = @Query + 'WHERE d.SerialNumber in (Select * from [dbo].[Split] (''' + @SerialNumbers + ''', '',''))';

但是,此解决方案对我不起作用,因为我需要使用LIKE而不是IN。我希望最终的SQL看起来像这样..

select DISTINCT d.* from Device d 
WHERE d.SerialNumber LIKE 'row1 of select statement'
  OR d.SerialNumber LIKE 'row2 of select statement'
  OR ....

其中select语句如下(它将用逗号分隔的字符串拆分并返回1列表)

Select * from [dbo].[Split] (''' + @SerialNumbers + ''', '',''))

我假设有一种循环select语句结果的方法,但循环不是基于设置的。这是否重要,考虑到我正在构建一个查询,最终本身不会有任何循环?

1 个答案:

答案 0 :(得分:1)

您可以像这样创建动态sql,但我认为更简单的解决方案是使用exists:

set @Query = 'select distinct d.* from Device d ';

if @SerialNumbers <> ''
   set @Query = @Query + 
       'where exists (
            select *
            from [dbo].[Split] (''' + @SerialNumbers + ''', '','') as s
            where d.SerialNumber like s.<column name> 
        )'