<强> 的重复: TSQL VARCHAR字符串操作

我是从Reporting Services报表生成动态SQL语句出的参数。报告服务的基本CSV格式传递MutiValue参数。举例如下状态的列表可以表示:AL,CA,NY,TN,VA

在一个SQL语句这是确定:

WHERE customerState In (@StateList) 

然而,动态变体是不正常:

SET @WhereClause1 = @WhereClause1 + 'AND customerState IN (' + @StateList + ') '

这是因为它转化为(无效SQL):

AND customerState IN (AL,CA,NY,TN,VA)

要处理它需要是这样的:

AND customerState IN ('AL','CA','NY','TN','VA')

有一些酷酷的表情,我可以使用单引号插入到我的动态SQL?

有帮助吗?

解决方案 3

这取中间照顾:

SET @StateList = REPLACE(@StateList, ' ' ''', ''')

然后引述的边缘:

SET @ WhereClause1 = @ WhereClause1 + 'AND customerState IN(' '' + @StateList + '' ')'

其他提示

替换在用于某种原因,当我没有工作。我最终使用 CHARINDEX

WHERE CHARINDEX( ',' + customerState + ',', ',' + @StateList + ',' ) > 0

对于任何试图使用动态SQL与where子句中的多值参数,并用它来运行SSRS报告,这是我得到了它周围...

create table #temp
(id, FName varchar(100), LName varchar(100))

declare @sqlQuery (nvarchar(max))
set @sqlQuery =
'insert into #temp
select 
id, 
FName, 
LName 
from dbo.table'
exec (@sqlQuery)

select 
FName, LName
from #temp
where #temp.id in (@id) -- @id being an SSRS parameter!

drop table #temp

当然,与此查询的问题是动态SQL将从dbo.table选择一切,然后从#TEMP选择就是过滤踢,所以如果有大量的数据 - 它可能不是那么大。但是...我很沮丧试图让更换工作,或任何其他解决方案,其他人已经公布。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top