SQL Server exec结果变为变量

时间:2018-05-19 22:00:36

标签: sql-server-2008-r2

我在SQL Server中获得了一个链接服务器,我必须在使用从链接服务器恢复的值插入和更新后创建一个触发器。

当我运行我的脚本时,我可以使用参数获取值,但是当我尝试使用该值更新记录时,字段会更新查询字符串而不是查询字符串的结果。

这是我的代码的一部分:

DECLARE @DWDOCID INT

SELECT @DWDOCID = DWDOCID 
FROM inserted

DECLARE @NUMERO_FORMULARIO VARCHAR(150)
DECLARE @ID_TITULAR VARCHAR(150)

SET @NUMERO_FORMULARIO = '200001001' 
SET @ID_TITULAR = '1050554243'

DECLARE @NOMBRE VARCHAR(250)
DECLARE @OPENQUERY NVARCHAR(4000), 
        @LinkedServer NVARCHAR(250)

SET @LinkedServer = 'MYSQLT'
SET @OPENQUERY = 'SELECT * FROM OPENQUERY('+ @LinkedServer + ','''
SET @NOMBRE = 'SELECT nombre FROM vistaBell WHERE codigo_contrato = ''''' + @NUMERO_FORMULARIO + ''''' and id_titular = ''''' + @ID_TITULAR + ''''''')'

EXEC (@OPENQUERY + @NOMBRE) 

如果我打印@NOMBRE,我会得到正确的值,但如果我尝试使用它:

UPDATE FLUJO_AFILIACIÓN_Y_CONTRA
SET APELLIDOS_Y_NOMBRES_DE_TITULA = @NOMBRE
WHERE DWDOCID = @DWDOCID

结果是字段中的字符串查询。我的SQL Server版本是2008 R2。

拜托,我希望有人能帮助我。

提前致谢

1 个答案:

答案 0 :(得分:0)

解决方案是创建一个类型表变量,在该变量中插入EXEC结果。 之后,您可以在其他变量中获取该值,并将其用于更新,插入或其他任何变量。

        DECLARE @afiliado varchar(250) = NULL
        DECLARE @idcontra varchar(250) = NULL
        DECLARE @inivigen date = NULL
        DECLARE @t TABLE (nomAfi VARCHAR(250), idCont VARCHAR(250), iniVig DATE)
        INSERT INTO @t EXEC (@OPENQUERY + @NOMBRE)
        SELECT @afiliado = nomAfi FROM @t
        SELECT @idcontra = idCont FROM @t
        SELECT @inivigen = iniVig FROM @t               
        ---------

        UPDATE FLUJO_AFILIACIÓN_Y_CONTRA
        SET APELLIDOS_Y_NOMBRES_DE_TITULA = @afiliado, ID_CONTRATANTE = @idcontra,
        FECHA_INICIO_VIGENCIA = @inivigen, ACTUALIZADO = 'SI'
        WHERE DWDOCID = @DWDOCID

我只有一个问题:当SQL Server使用该变量(@t)例如更新一次提交事务时,SQL Server会删除该变量吗?破坏它的价值?或类似的东西?

谢谢