ref: ayuda urgente por fa!

07/09/2006 - 23:17 por César Ag | Informe spam
Tengo el siguiente problema con T-SQL:

Como parametro se ingresa un varchar llamado @Item. El cual sirve como
parametro para una consulta. El problema, es que el campo con que se
compara es un campo del tipo INT.

Declare @Item varchar(50)
SET @Item ='60001,60002,60003'

Declare @Consumo money

SELECT @Consumo=sum(Gasto)
FROM Tabla_Gastos
WHERE Codigo in(@Item ) /*Esto debiera quedar Where Codigo in
(60001,60002,60003)*/
SELECT @Consumo

Alguien se le ocurre como tratar el problema?
 

Leer las respuestas

#1 Alejandro Mesa
08/09/2006 - 00:01 | Informe spam
César,

Puedes usar sql dinamico.

declare @s nvarchar(4000)
declare @Item nvarchar(50)
declare @consumo money

SET @Item = N'60001,60002,60003'
set @s = N'
SELECT @Consumo=sum(Gasto)
FROM Tabla_Gastos
WHERE Codigo in (' + @Item + N')'

exec dbo.sp_executesql @s, N'@Consumo money output', @consumo output

select @consumo
go

Pero mucho cuidado como usas sql dinamico, recuerda que si concatenas a la
sentencia, valores entrados por el usuario, tendrias que asegurarte que no se
este inyectando codigo. Te recomiendo leas este articulo antes de usar sql
dinamico.

Las virtudes y maldades del SQL dinámico
http://www.hayes.ch/sql/sql_dinamico.html

Taqmbien puedes crear una funcion de usuario que descomponga esa cadena
(lista) y devuelva una tabla donde cada elemento de la lista es transformado
en una fila. De esta forma pudieras usar algo asi como:

SELECT @Consumo=sum(Gasto)
FROM Tabla_Gastos
WHERE Codigo in (select valor from dbo.ufn_split(@Item))
go

En este articulo encontraras la funcion a la que me refiero.

Arrays and Lists in SQL Server
http://www.sommarskog.se/arrays-in-sql.html

Tambien puedes pasar la lista como un documento XML y usar la funcion
openxml para manipular el documento. Puedes leer sobre esto en los libros en
linea.


AMB

"César Ag" wrote:

Tengo el siguiente problema con T-SQL:

Como parametro se ingresa un varchar llamado @Item. El cual sirve como
parametro para una consulta. El problema, es que el campo con que se
compara es un campo del tipo INT.

Declare @Item varchar(50)
SET @Item ='60001,60002,60003'

Declare @Consumo money

SELECT @Consumo=sum(Gasto)
FROM Tabla_Gastos
WHERE Codigo in(@Item ) /*Esto debiera quedar Where Codigo in
(60001,60002,60003)*/
SELECT @Consumo

Alguien se le ocurre como tratar el problema?



Preguntas similares