TSQL传递多值报表服务参数为动态SQL
-
23-08-2019 - |
题
<强> 强>的重复: 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选择就是过滤踢,所以如果有大量的数据 - 它可能不是那么大。但是...我很沮丧试图让更换工作,或任何其他解决方案,其他人已经公布。
不隶属于 StackOverflow