目前在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语句结果的方法,但循环不是基于设置的。这是否重要,考虑到我正在构建一个查询,最终本身不会有任何循环?
答案 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>
)'