動的SQLに多値Reporting Servicesのパラメータを渡すTSQL
-
23-08-2019 - |
質問
の のの重複: TSQL varchar型の文字列操作>
私は、レポートサービスのレポートからのパラメータのうち、動的SQLステートメントを構築しています。サービスを報告することは、基本的なCSV形式でMutiValueパラメータを渡します。例えば以下のように状態のリストを表すことができる:AL、CA、NY、TN、VA
SQL文では、これはOKです。
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に単一引用符を挿入するために使用することができますいくつかのクールな表現はありますか?
解決 3
この真ん中の世話をする:
SET @StateList =(@StateList、 ' ' ''、 ''')REPLACE
次に、エッジを引用します:
SET @ WhereClause1 = @ WhereClause1 + 'AND customerState IN(' '' + @StateList + '' ')'
他のヒント
何らかの理由でInで使用する場合、私のために動作しませんでしたREPLACE。私が使用して終了 CHARINDEXする
WHERE CHARINDEX( ',' + customerState + ',', ',' + @StateList + ',' ) > 0
は、SSRSレポートを実行するwhere句で複数値のパラメータを指定して、動的SQLを使用し、それを使用しようとする人にとって、これは私が周りに得た方法であること...
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取得しようとイライラしました、または任意の他のソリューションを他の人が投稿していました。