0

重複TSQLvarchar文字列操作

レポートサービスレポートのパラメーターから動的SQLステートメントを作成しています。レポートサービスは、MutiValueパラメータを基本的なCSV形式で渡します。たとえば、州のリストは次のように表すことができます:AL、CA、NY、TN、VA

SQLステートメントでは、これは問題ありません。

WHERE customerState In (@StateList) 

ただし、動的バリアントはOKではありません。

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 に答える