SQL Server - Problema con REPLACE y comillas simples

 
Vista:

Problema con REPLACE y comillas simples

Publicado por Daniel (13 intervenciones) el 04/06/2019 14:11:54
Hola al foro, tengo un problema, necesito que un Store Procedure procese la siguiente información:


SELECT * FROM Tabla WHERE CampoAlfa in ('883','E452','671X')

o sea

@Lista = '883','E452','671X'
SELECT * FROM Tabla WHERE CampoAlfa in (@Lista)

El string '883','E452','671X' es variable y puede contener uno o mas ítems, lo tendría que pasar en una lista pero al pasarlo me rebota porque dice que tiene muchos argumentos.

Mi pregunta es, como hago? tendría que usar el REPLACE pero se me complica con las comillas simples.
Muchas gracias si alguien me puede dar una ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problema con REPLACE y comillas simples

Publicado por Isaias (4557 intervenciones) el 04/06/2019 17:17:23
No hay de otra, solo que con el aviso de que utilizados indices
1
2
3
4
declare @Lista = '883','E452','671X'
declare @SQLString nvarchar(1000)
SET @SQLString = N'SELECT * FROM Tabla WHERE CampoAlfa in ('+@Lista+')'
EXECUTE sp_executesql @SQLString
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 32
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problema con REPLACE y comillas simples

Publicado por Luis Horacio (13 intervenciones) el 13/06/2019 20:55:30
Puedes trabajar asi:

declare @Lista varchar(100)
declare @SQLString nvarchar(1000)

set @Lista = char(39) + '883' + char(39) + ',' + char(39) + 'E452' + char(39) + ',' + char(39) + '671X' + char(39)

SET @SQLString = N'SELECT * FROM Tabla WHERE CampoAlfa in (' + @Lista +')'

EXEC (@SQLString)

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problema con REPLACE y comillas simples

Publicado por Isaias (4557 intervenciones) el 13/06/2019 22:43:57
Solo como comentario, cambiar EXEC por EXEC SP_EXECUTESQL, la variable debe ser NVARCHAR
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Javier
Val: 111
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Problema con REPLACE y comillas simples

Publicado por Javier (45 intervenciones) el 13/06/2019 23:47:15
Podrías pasar una cadena separada por comas y hacer una función que te regrese una tabla con los "ITEMS" y trabajas con ella.

1
TuCadena = '883,E452,671X,'

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE FUNCTION funcion
(
	@List nvarchar(max)
)
RETURNS	@tblItems TABLE(Item tipodecampo)
AS
BEGIN
	WHILE (SELECT CHARINDEX(',', @List, 1)) > 0
	BEGIN
		INSERT @tblItems
		SELECT LEFT(@List, CHARINDEX(',', @List, 1) - 1)
		SELECT @List = RIGHT(@List, LEN(@List) - CHARINDEX(',', @List, 1))
	END
	RETURN
END

Y la usas
1
SELECT Item INTO tablatemporal FROM funcion(TuCadena)

Esto te debería regresar algo así

1
2
3
4
ITEM
883
E452
671X

Ojo para usar la función tu cadena debe terminar con ','
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar