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

Update SQL dinamico

Estas en el tema de Update SQL dinamico en el foro de SQL Server en Foros del Web. Buenas Estoy intentano crear un instruccion update con columna dinamica con lo siguiente: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original ALTER PROCEDURE [ dbo ] . ...
  #1 (permalink)  
Antiguo 29/09/2014, 15:59
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 9 meses
Puntos: 1
Update SQL dinamico

Buenas

Estoy intentano crear un instruccion update con columna dinamica con lo siguiente:
Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[UpdateTemporalDataPMO]
  2.  
  3.      @oldStatus INT,
  4.      @CountryName  VARCHAR(90)
  5.  
  6. AS
  7.      DECLARE @intTotal INT
  8.      DECLARE @SQL VARCHAR(MAX)
  9.      DECLARE @ColumnName VARCHAR(90)
  10.      DECLARE @tableName VARCHAR (70)
  11. BEGIN try
  12.     --SET @ColumnName=@CountryName
  13.     SET @tableName='TemporalDataPMO'
  14.    SET @intTotal=300
  15.     --SET @sql='Select * from [dbo].[TemporalDataPMO]'
  16.     ----SET @sql=Update [dbo].[TemporalDataPMO] SET  + 'Belgium=' + 100  Where IdState=35
  17.    
  18.     SET @SQL = @SQL + 'UPDATE ' + @tableName + ' SET ' + @CountryName +' = '+ CONVERT(nvarchar(2),@intTotal )  +  ' WHERE  IdState='+CONVERT(nvarchar(2),@oldStatus ) + ';'
  19.  
  20.    EXEC(@SQL)
  21.  
  22. END try
  23. BEGIN CATCH
  24.     ---- Execute error retrieval routine.
  25.     --EXECUTE usp_GetErrorInfo;
  26.      PRINT N'Error = ' + CAST(@@ERROR AS NVARCHAR(8));
  27. END CATCH;
[/CODE]

Me está devolviendo un error de conversion ¿como puedo pasarle un id (int ) a la query dinamica?
No acaba de hacer el update.

Gracias por la ayuda.

Saludos

Última edición por gnzsoloyo; 30/09/2014 a las 07:55
  #2 (permalink)  
Antiguo 30/09/2014, 07:33
 
Fecha de Ingreso: septiembre-2014
Ubicación: Peru-Lima-Chorrillos
Mensajes: 17
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Update SQL dinamico

Hola amigo,

buenos días, en vez de convert utiliza cast, y debaguea tu lineas de código en ejecución de cadenas SQL.

Saludos cordiales,
Ronald León Madrid.
  #3 (permalink)  
Antiguo 30/09/2014, 08:26
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Update SQL dinamico

Si neceistaria cambiar el SET del update de forma dinamica

Código SQL:
Ver original
  1. SET @SQL =N'UPDATE EC_DashBoard.dbo.DB_TemporalDataPMO  SET EC_DashBoard.dbo.DB_TemporalDataPMO' +@Pais+ '[@ColumnName] =600 WHERE  IdState=35'
  2.  
  3.    EXECUTE SP_EXECUTESQL @SQL

El problema es que no coje el parametro set dinamico
ideas?
  #4 (permalink)  
Antiguo 30/09/2014, 08:53
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Update SQL dinamico

Debes leer un poco mas sobre el procedimiento sp_executesql:

Código SQL:
Ver original
  1. DECLARE @IntVariable INT;
  2. DECLARE @SQLString nvarchar(500);
  3. DECLARE @ParmDefinition nvarchar(500);
  4.  
  5. /* Build the SQL string one time.*/
  6. SET @SQLString =
  7.      N'SELECT BusinessEntityID, NationalIDNumber, JobTitle, LoginID
  8.       FROM AdventureWorks2012.HumanResources.Employee
  9.       WHERE BusinessEntityID = @BusinessEntityID';
  10. SET @ParmDefinition = N'@BusinessEntityID tinyint';
  11. /* Execute the string with the first parameter value. */
  12. SET @IntVariable = 197;
  13. EXECUTE sp_executesql @SQLString, @ParmDefinition,
  14.                       @BusinessEntityID = @IntVariable;
  15. /* Execute the same string with the second parameter value. */
  16. SET @IntVariable = 109;
  17. EXECUTE sp_executesql @SQLString, @ParmDefinition,
  18.                       @BusinessEntityID = @IntVariable;

Para saber mas:

http://msdn.microsoft.com/es-mx/library/ms188001.aspx
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 01/10/2014, 01:11
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Update SQL dinamico

Ahora necesito recuperar un valor de un select dinamico, este procedimiento se esta llamando desde otro procedimiento.

Estoy intentando de esta manera:

Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[GetTotalForcountry]
  2.    @FIELD VARCHAR(90),
  3.    @IdState INT,
  4.   @Total INT
  5.    AS
  6.        DECLARE @cnt INT
  7.        DECLARE @sqlCommand nvarchar(1000)  
  8.        
  9.    
  10.    BEGIN
  11.    SET @FIELD='[Belgium]'
  12.     SET @sqlCommand = 'SELECT @TotalOUT='+ @FIELD +'FROM EC_DashBoard.dbo.DB_TemporalDataPMO where idstate='+CONVERT(nvarchar, @idState)
  13.     EXECUTE sp_executesql @sqlCommand,'@TotalOUT int OUTPUT', @TotalOUT=@Total OUTPUT;
  14.     RETURN
  15.  
  16.    END

Necesito que me devuelva el valor de una columna dinamica, estoy siguiendo los ejemplos de msdn pero nada

¿Podria alguine echarme un cable o alguna alternativa para no utilizarlo con output?

Mil gracias

Última edición por gnzsoloyo; 01/10/2014 a las 07:54
  #6 (permalink)  
Antiguo 01/10/2014, 07:35
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Update SQL dinamico

y tu variable output en tu procedure principa?? no la estas declarando:

Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[GetTotalForcountry]
  2. @FIELD VARCHAR(90),
  3. @IdState INT,
  4. [B]@Total INT output[/B]
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 01/10/2014, 09:54
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Update SQL dinamico

Este es el codigo con el que estoy intentando capturar el valor.
El campo de la select es dinamico, lo que necesito es guardar el valor de esa select (contra esa columna) en mi parametro OUTPUT pero no se si es problema de sintaxis..

el codigo con el que estoy probando es:
Código SQL:
Ver original
  1. USE [EC_DashBoard]
  2. GO
  3. /****** Object:  StoredProcedure [dbo].[GetTotalForcountry]    Script Date: 10/01/2014 17:54:57 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8.  ALTER PROCEDURE [dbo].[GetTotalForcountry]
  9.    @FIELD VARCHAR(90),
  10.    @IdState INT,
  11.    @Total INT output
  12.    AS
  13.        DECLARE @sqlCommand nvarchar(1000)  
  14.        
  15.    
  16.    BEGIN
  17.    SET @FIELD='[Belgium]'
  18.     SET @sqlCommand = 'SELECT @TotalOUT='+ @FIELD +'FROM EC_DashBoard.dbo.DB_TemporalDataPMO where idstate='+CONVERT(nvarchar, @idState)
  19.     --EXEC (@sqlCommand)
  20.     EXECUTE sp_executesql @sqlCommand,'@TotalOUT int OUTPUT', @TotalOUT=@Total OUTPUT;
  21.    
  22.  
  23.    END
Gracias libras.
  #8 (permalink)  
Antiguo 01/10/2014, 09:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Update SQL dinamico

@maldini3783: Por favor, usa los Highlight que tienes disponibles en el combo cuando postees código. Hay uno específico para SQL.
Ayuda a leerlo con claridad y además te permitirá ver si existen errores de sintaxis manifiestos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 01/10/2014 a las 12:45
  #9 (permalink)  
Antiguo 01/10/2014, 12:20
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Update SQL dinamico

¿Ya leíste la documentación de sp_executesql o buscaste en google los ejemplos?
__________________
MCTS Isaias Islas
  #10 (permalink)  
Antiguo 02/10/2014, 02:01
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Update SQL dinamico

si he estado revisando la documentacion de ese procedimiento pero no consigo realizar la consulta.
Estoy intentando capturar el valor ahora de esta forma:

Código SQL:
Ver original
  1. SELECT @TotalOUT=Belgium  --Esta columna es dinámica
  2.  FROM EC_DashBoard.dbo.DB_TemporalDataPMO  WHERE idstate = @IdState

En este ejemplo si me devuelve el valor de la columna Belgium (por ejemplo) pero al intentar realizar la asignacion con un parametro de entrada no consigue acceder al valor e intenta hacer una conversiona int, ejemplo:
Código SQL:
Ver original
  1. SELECT @TotalOUT=@CountryName
  2.  FROM EC_DashBoard.dbo.DB_TemporalDataPMO  WHERE idstate = @IdState AND @CountryName=@CountryName

¿Como podría almacenar ese valor para cada columna que entre como parámetro?

Muchas gracias por la ayuda.
  #11 (permalink)  
Antiguo 02/10/2014, 08:29
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Update SQL dinamico

Cita:
Iniciado por maldini3783 Ver Mensaje

Código SQL:
Ver original
  1. SELECT @TotalOUT=@CountryName
  2.  FROM EC_DashBoard.dbo.DB_TemporalDataPMO  WHERE idstate = @IdState AND @CountryName=@CountryName
tienes varios gaps en esta consulta primero deberia de quedar asi:

Código SQL:
Ver original
  1. DECLARE @query nvarchar(MAX)
  2. SET @query=' Select @TotalOUT=count( ' + CHAR(39) + @CountryName +  CHAR(39) + '
  3. FROM EC_DashBoard.dbo.DB_TemporalDataPMO  WHERE idstate = @IdState and CountryName=' + CHAR(39) +  @CountryName + CHAR(39)

Ahora cuando executas un sp_executesql puedes retornar un valor mira este ejemplo:

Código SQL:
Ver original
  1. CREATE TABLE testing_paises
  2. (
  3. pais VARCHAR(200)
  4. )
  5.  
  6. INSERT INTO testing_paises VALUES ('España')
  7. GO 2
  8. INSERT INTO testing_paises VALUES ('Mexico')
  9. GO 5
  10. INSERT INTO testing_paises VALUES ('Belice')
  11. GO 3
  12.  
  13. CREATE PROCEDURE test_paises (@pais VARCHAR(200), @contador INT output)
  14. AS
  15. DECLARE @query nvarchar(MAX)
  16. DECLARE @ParmDefinition nvarchar(500);
  17.  
  18. SET @query='select @contador=count(*) from testing_paises where pais=' + CHAR(39) +  @pais + CHAR(39)
  19. SET @ParmDefinition = N'@contador int OUTPUT';
  20. EXEC sp_executesql @query,@ParmDefinition, @contador = @contador OUTPUT
  21. RETURN @contador
  22.  
  23.  
  24. DECLARE @contador INT
  25. EXEC test_paises 'Mexico',@contador output
  26. SELECT @contador


fijate como se retornan los valores y como lo estas haciendo tu, para mayor referencia aqui la documentacion oficial del sp_executesql
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: columna, dinamico, query, select, siguiente, sql, update
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 13:42.