Pregunta

Duplicar de TSQL manipulación de cadenas varchar

Estoy construyendo una sentencia de SQL dinámico de los parámetros de un informe de los servicios de información. Servicios de la información pasa parámetros MutiValue en un formato básico CSV. Por ejemplo, una lista de estados que puede representarse como sigue: AL, CA, NY, TN, VA

En una declaración SQL que esto está bien:

WHERE customerState In (@StateList) 

Sin embargo, la variante dinámica no está bien:

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

Esto se debe a que se traduce en SQL (no válido):

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

Para procesar necesita algo como esto:

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

¿Hay alguna expresión fresco que puedo utilizar para insertar las comillas simples en mi SQL dinámico?

¿Fue útil?

Solución 3

Esto se hace cargo de la mitad:

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

A continuación, citar los bordes:

SET @ WhereClause1 = @ WhereClause1 + 'y ClienteProvincia IN (' '' + @StateList + '' ')'

Otros consejos

REPLACE no funcionó para mí cuando se utiliza con EN, por alguna razón. Terminé usando CHARINDEX

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

Para cualquier persona que intente utilizar SQL dinámico con un parámetro de varios valores en la cláusula where y lo utilizan para ejecutar un informe de SSRS, esto es cómo llegué a su alrededor ...

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

Por supuesto, el problema con esta consulta es que el SQL dinámico seleccionará todo, desde dbo.table, y luego seleccione el de #temp es donde entra en acción el filtro, por lo que si hay una gran cantidad de datos - es probablemente no tan Excelente. Pero ... me vieron frustrados sus intentos de conseguir REPLACE para trabajar, o cualquier otro tipo de soluciones que otros habían publicado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top