Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

query dinámico

Estas en el tema de query dinámico en el foro de SQL Server en Foros del Web. Amigos (as) Tengo un nuevo problema para compartirlo y pedirles ayuda para resolverlo, se trata de un query dinámico que me permite generar una UPDATE ...
  #1 (permalink)  
Antiguo 14/03/2012, 09:54
 
Fecha de Ingreso: febrero-2012
Mensajes: 7
Antigüedad: 12 años, 2 meses
Puntos: 0
query dinámico

Amigos (as)

Tengo un nuevo problema para compartirlo y pedirles ayuda para resolverlo, se trata de un query dinámico que me permite generar una UPDATE que tiene la siguiente forma:

SET @CadenaColumna = 'UPDATE ##MatrizVariables SET '
SET @CadenaColumna = @CadenaColumna +' '+ @NombreVariable +'=('
SET @CadenaColumna = @CadenaColumna +' '+ 'SELECT Valor FROM PlanillaVariables WHERE IdTablero='
SET @CadenaColumna = @CadenaColumna +' '+ @IdTablero +'AND' + 'IdVariable = '+ @IdVariable +'AND' + 'IdMes= '+ @Mes+')'
SET @CadenaColumna= @CadenaColumna + 'WHERE IdMes=' + @Mes

exec (@CadenaColumna)

cuando lo ejecuto SQL server 2005 me envía el siguiente mensaje:

Conversion failed when converting the varchar value 'UPDATE ##MatrizVariables SET CumPlanTrabajo=( SELECT Valor ' to data type int.

Algunas aclaraciones:
1.- La variable @CadenaColumna es un VARCHAR (600)
2.- La variable @NombreVariable representa a una columna de la tabla temporal ##MatrizVariables, dicha columna es un DECIMAL(18,2)
3.- Si se conociera el nombre de la columna de la tabla ##MatrizVariables que se quiere actualizar la sentencia sería de esta forma:

UPDATE ##MatrizVariables SET CumPlanTrabajo=(
SELECT Valor
FROM PlanillaVariables
WHERE IdTablero=@IdTablero
AND IdVariable = @IdVariable
AND IdMes=@Mes
)
WHERE IdMes=@Mes

Última edición por asalazarayllon; 14/03/2012 a las 10:38
  #2 (permalink)  
Antiguo 14/03/2012, 11:53
 
Fecha de Ingreso: febrero-2012
Mensajes: 7
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: query dinámico

Holas

Encontré la solución al problema del query dinámico, aquí lo tienen:

SET @CadenaColumna = 'UPDATE ##MatrizVariables SET '
SET @CadenaColumna = @CadenaColumna +' '+ @NombreVariable +'=(SELECT'
SET @CadenaColumna = @CadenaColumna +' ' + 'CONVERT (VARCHAR (7), Valor)'
SET @CadenaColumna = @CadenaColumna +' ' + 'FROM PlanillaVariables WHERE IdTablero='
SET @CadenaColumna= @CadenaColumna +' ' + CONVERT (VARCHAR (7), @IdTablero)
SET @CadenaColumna = @CadenaColumna +' ' + 'AND IdVariable='
SET @CadenaColumna= @CadenaColumna +' ' + CONVERT (VARCHAR (7), @IdVariable)
SET @CadenaColumna = @CadenaColumna +' ' + 'AND IdMes='
SET @CadenaColumna= @CadenaColumna +' ' + CONVERT (VARCHAR (2), @Mes)
SET @CadenaColumna= @CadenaColumna +')'
SET @CadenaColumna= @CadenaColumna + 'WHERE IdMes=' + CONVERT (VARCHAR (2), @Mes)
exec (@CadenaColumna)
Saludos
  #3 (permalink)  
Antiguo 14/03/2012, 20:03
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: query dinámico

modifica tu exec (cadena) por exec sp_executesql

Cambia @CadenaColumna por tipo NVARCHAR
__________________
MCTS Isaias Islas

Etiquetas: query, select, server, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:36.