0

重复TSQL varchar 字符串操作

我正在使用报告服务报告中的参数构建动态 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 中?

4

3 回答 3

2

出于某种原因,与 IN 一起使用时,REPLACE 对我不起作用。我最终使用了CHARINDEX

WHERE CHARINDEX( ',' + customerState + ',', ',' + @StateList + ',' ) > 0
于 2010-06-30T10:49:24.373 回答
2

对于任何试图在 where 子句中使用带有多值参数的动态 SQL 并使用它来运行 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 中选择是过滤器开始的地方,所以如果有大量数据 - 它可能不是那么好。但是......我试图让 REPLACE 工作或其他人发布的任何其他解决方案感到沮丧。

于 2015-01-24T00:16:21.167 回答
1

这需要照顾中间:

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

然后引用边缘:

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

于 2009-04-03T03:33:59.860 回答