Update con una variable como nombre de columna

05/07/2006 - 20:00 por Sergio | Informe spam
Tengo una tabla con 100 columnas, Columna1...Columna31
Para un dia tengo que modificar los datos de la columna0, al siguiente el de
la columna1, y asi sucesivamente.
Se puede poner algo como
'En esta tabla tengo el dia que le corresponde
SET @Columna=(SELECT Top 1 dia From T_dias Order by Dia desc)
SET @Valor=(SELECT sum(importe) FROM t_importes WHERE dia=@Columna)

y quiero hacer:

UPDATE t_mes SET @columna=@Valor where mes=@mes_actual.

esto es para poder evitar el uso de los IF y/o CASE y comparar si
@Columna="Columna1" entonces el SET del update poner columna1, sino que tome
el contenido directamente de la variable @Columna.

No puedo rediseñar la tabla con las 31 columnas.

Gracias por su ayuda, y si no se puede, tendre que recurrir a los IF y CASE

SRD
 

Leer las respuestas

#1 Alejandro Mesa
05/07/2006 - 20:16 | Informe spam
Sergio,

Eso no es posible en SQL Server. Tendrias que usar SQL dinamico para el caso.

Ejemplo:

declare @sql nvarchar(4000)

set @sql = N'UPDATE t_mes SET [' + @columna + '] = @Valor where
mes=@mes_actual'

exec sp_executesql @sql, N'@valor int, @mes_actual int', 50, 12
go

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


AMB


"Sergio" wrote:

Tengo una tabla con 100 columnas, Columna1...Columna31
Para un dia tengo que modificar los datos de la columna0, al siguiente el de
la columna1, y asi sucesivamente.
Se puede poner algo como
'En esta tabla tengo el dia que le corresponde
SET @Columna=(SELECT Top 1 dia From T_dias Order by Dia desc)
SET @Valor=(SELECT sum(importe) FROM t_importes WHERE dia=@Columna)

y quiero hacer:

UPDATE t_mes SET @columna=@Valor where mes=@mes_actual.

esto es para poder evitar el uso de los IF y/o CASE y comparar si
@Columna="Columna1" entonces el SET del update poner columna1, sino que tome
el contenido directamente de la variable @Columna.

No puedo rediseñar la tabla con las 31 columnas.

Gracias por su ayuda, y si no se puede, tendre que recurrir a los IF y CASE

SRD

Preguntas similares