none
Hacer un UPDATE poniendo el nombre de la tabla y servidor por parámetro RRS feed

  • Pregunta

  • Hola, tengo un problema, estoy en un servidor intermedio que tiene acceso a 10 servidores.

    Quiero crear un store que en un momento determinado hace un update, y necesito saber si es posible pasar el nombre del servidor y tabla por parámetro, así cada vez que llamo al store le paso sobre que servidor quiero que se haga el update. Por ejemplo:

    CREATE PROCEDURE ValidacionMails_PrepararEnvio
    (
    @Servidor nvarchar(max)
    )
    
    AS
    
    INSERT INTO blabla...
    
    GO
    
    UPDATE @Servidor
    SET CampoA = 12, CampoB = GETDATE()
    
    GO

    Mi idea es llamar al store pasando a la variable @Servidor = 'SERVIDOR.BASE.dbo.TABLA'

    Se puede hacer algo asi?

    jueves, 20 de julio de 2017 20:01

Respuestas

  • Hola que tal.

    Es factible realizarlo, pero previamente deberían estar generados los Linked Servers para cada uno de lo servidores donde se quiera realizar el Update.

    Para insertar en forma remota, siempre se debe respetar la estructura de nombre de 4 partes: Servidor.BaseDeDatos.Schema.Tabla

    Deberías armar una variable Varchar adicional para armar el comando de update, y luego realizar un EXEC.

    Por ejemplo

    CREATE PROCEDURE ValidacionMails_PrepararEnvio
    (
    @Servidor nvarchar(100)
    )
    
    AS
    DECLARE @sqlCommand varchar(1000)
    
    INSERT INTO blabla...
    
    GO
    
    
    SET @sqlCommand = 'UPDATE TBL SET CampoA = 12, CampoB = GETDATE() FROM '+@Servidor+'.Base.Schema.Tabla TBL'
    EXEC (@sqlCommand)
    
    
    GO
    
    


    Saludos.


    Mariano K.


    • Editado MarianokMVP jueves, 20 de julio de 2017 20:34
    • Marcado como respuesta programinca viernes, 21 de julio de 2017 14:50
    jueves, 20 de julio de 2017 20:34

Todas las respuestas

  • Hola que tal.

    Es factible realizarlo, pero previamente deberían estar generados los Linked Servers para cada uno de lo servidores donde se quiera realizar el Update.

    Para insertar en forma remota, siempre se debe respetar la estructura de nombre de 4 partes: Servidor.BaseDeDatos.Schema.Tabla

    Deberías armar una variable Varchar adicional para armar el comando de update, y luego realizar un EXEC.

    Por ejemplo

    CREATE PROCEDURE ValidacionMails_PrepararEnvio
    (
    @Servidor nvarchar(100)
    )
    
    AS
    DECLARE @sqlCommand varchar(1000)
    
    INSERT INTO blabla...
    
    GO
    
    
    SET @sqlCommand = 'UPDATE TBL SET CampoA = 12, CampoB = GETDATE() FROM '+@Servidor+'.Base.Schema.Tabla TBL'
    EXEC (@sqlCommand)
    
    
    GO
    
    


    Saludos.


    Mariano K.


    • Editado MarianokMVP jueves, 20 de julio de 2017 20:34
    • Marcado como respuesta programinca viernes, 21 de julio de 2017 14:50
    jueves, 20 de julio de 2017 20:34
  • Genial, funcionó perfecto Mariano, mil gracias!!!
    viernes, 21 de julio de 2017 14:50