TSQL Passando multivalore Reporting Services parametri in SQL dinamico
-
23-08-2019 - |
Domanda
Duplica di : TSQL manipolazione delle stringhe varchar
Sto costruendo un'istruzione SQL dinamica di parametri da un rapporto di servizi di segnalazione. Reporting Services passa MutiValue parametri in un formato di base CSV. Per esempio un elenco di stati può essere rappresentata come segue: AL, CA, NY, TN, VA
In una dichiarazione SQL questo è OK:
WHERE customerState In (@StateList)
Tuttavia, la variante dinamica non è OK:
SET @WhereClause1 = @WhereClause1 + 'AND customerState IN (' + @StateList + ') '
Questo perché si traduce in (SQL non valido):
AND customerState IN (AL,CA,NY,TN,VA)
Per elaborare ha bisogno di qualcosa di simile:
AND customerState IN ('AL','CA','NY','TN','VA')
C'è qualche espressione fresca posso utilizzare per inserire le virgolette singole nella mia SQL dinamico?
Soluzione 3
Questo si prende cura del mezzo:
SET @StateList = REPLACE (@StateList, ' ' ''', ''')
Poi citare i bordi:
SET @ WhereClause1 = @ WhereClause1 + 'E customerState IN (' '' + @StateList + '' ')'
Altri suggerimenti
REPLACE non ha funzionato per me quando viene utilizzato con IN per qualche ragione. Ho finito per usare CHARINDEX
WHERE CHARINDEX( ',' + customerState + ',', ',' + @StateList + ',' ) > 0
Per chiunque si tenta di utilizzare SQL dinamico con un parametro multivalore nella clausola WHERE e usarlo per eseguire un report SSRS, questo è come mi sono intorno ad esso ...
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
Certo, il problema con questa query è che l'SQL dinamico selezionare tutto da dbo.table, e poi l'selezionare dalla #temp è dove il filtro entra in gioco, quindi se c'è una grande quantità di dati - è probabilmente non così grande. Ma ... mi sono frustrato cercando di ottenere REPLACE al lavoro, o di qualsiasi altra soluzione gli altri aveva postato.