Frage

Duplizieren von : TSQL varchar String-Manipulation

Ich baue eine dynamische SQL-Anweisung aus Parametern aus einem Reporting Services-Bericht. Reporting Services geht MutiValue Parameter in einem Grund CSV-Format. Zum Beispiel eine Liste von Staaten kann wie folgt dargestellt werden: AL, CA, NY, TN, VA

In einer SQL-Anweisung das ist OK:

WHERE customerState In (@StateList) 

Allerdings ist die dynamische Variante ist nicht OK:

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

Das ist, weil es übersetzt (ungültige SQL):

AND customerState IN (AL,CA,NY,TN,VA)

So verarbeitet es so etwas wie dies benötigt:

AND customerState IN ('AL','CA','NY','TN','VA')

Gibt es einen kühlen Ausdruck, den ich die einfachen Anführungszeichen in meine dynamische SQL einfügen können?

War es hilfreich?

Lösung 3

Diese kümmert sich um die Mitte:

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

Dann zitieren die Kanten:

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

Andere Tipps

REPLACE nicht für mich arbeiten, wenn sie mit IN aus irgendeinem Grund verwendet. Ich landete mit CHARINDEX

WHERE CHARINDEX( ',' + customerState + ',', ',' + @StateList + ',' ) > 0

Für alle versuchen, dynamischen SQL zu verwenden, um mit einem mehrwertigen Parameter in der where-Klausel und es zu verwenden, einen SSRS-Bericht zu laufen, das ist, wie ich um ihn herum ...

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

Zugegeben, das ist das Problem mit dieser Abfrage, dass die dynamische SQL alles von dbo.table zu wählen, und dann der Auswahl von #temp ist, wo die Filter in Kicks, also wenn es eine große Menge von Daten - es ist wahrscheinlich nicht so groß. Aber ... ich habe frustriert versucht, Arbeit zu bekommen REPLACE, oder andere Lösungen andere hatten geschrieben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top