Consulta sobre SELECT ... WHERE Id_TipoUsuario IN ...

12/07/2004 - 13:27 por Gustavo | Informe spam
Hola a todos:

Estoy intentando hacer una select con un procedimiento almacenado sobre una
tabla llamada TiposUsuarios, pero quiero pasar en un único parámetro la
condición para la IN.

La tabla TiposUsuarios tiene el siguiente formato:
id_TipoUsuario int
Descripcion varchar(255)

y el procedimieento que quiero usar es algo así:
CREATE PROCEDURE SpSelectTiposUsuariosIN
@ListaIdTipoUsuario varchar(255)
AS
SELECT id_TipoUsuario, Descripcion
FROM TiposUsuarios
WHERE id_TipoUsuario in (@ListaIdTipoUsuario)

Y quiero llamarlo de la siguiente forma:
SpSelectTiposUsuariosIN '1,2,3,6'

El error que me da es:
Servidor: mensaje 245, nivel 16, estado 1, procedimiento
SpSelectTiposUsuariosIN, línea 4
Error de sintaxis al convertir el valor varchar '1,2,3,6' para una columna
de tipo de datos int.

Ya se que podría solventar este problema haciendo que la ejecución de la
select fuese dinámica del tipo:
EXECUTE sp_executesql @SQLString
donde @SQLString sería la select generada dinámicamente.

Me gustaría saber si se puede hacer una manera más elegante

Gracias y un saludo.

Gus.
 

Leer las respuestas

#1 Tinoco
12/07/2004 - 14:31 | Informe spam
Hol Gus.

Puedes utilizar el sp del sistema [sp_executesql], la
desventaja de este SP es el nivel de seguridad, es bajo.

DECLARE @SQLString NVARCHAR(500)

SET @SQLString = N'SELECT id_TipoUsuario, Descripcion
FROM TiposUsuarios
WHERE id_TipoUsuario in (' + @ListaIdTipoUsuario + ')'

EXECUTE sp_executesql @SQLString

Hermilson T.
MCDBA, MCSD

Hola a todos:

Estoy intentando hacer una select con un procedimiento


almacenado sobre una
tabla llamada TiposUsuarios, pero quiero pasar en un


único parámetro la
condición para la IN.

La tabla TiposUsuarios tiene el siguiente formato:
id_TipoUsuario int
Descripcion varchar(255)

y el procedimieento que quiero usar es algo así:
CREATE PROCEDURE SpSelectTiposUsuariosIN
@ListaIdTipoUsuario varchar(255)
AS
SELECT id_TipoUsuario, Descripcion
FROM TiposUsuarios
WHERE id_TipoUsuario in (@ListaIdTipoUsuario)

Y quiero llamarlo de la siguiente forma:
SpSelectTiposUsuariosIN '1,2,3,6'

El error que me da es:
Servidor: mensaje 245, nivel 16, estado 1, procedimiento
SpSelectTiposUsuariosIN, línea 4
Error de sintaxis al convertir el valor varchar '1,2,3,6'


para una columna
de tipo de datos int.

Ya se que podría solventar este problema haciendo que la


ejecución de la
select fuese dinámica del tipo:
EXECUTE sp_executesql @SQLString
donde @SQLString sería la select generada dinámicamente.

Me gustaría saber si se puede hacer una manera más


elegante

Gracias y un saludo.

Gus.

Preguntas similares