我在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。
拜托,我希望有人能帮助我。
提前致谢
答案 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会删除该变量吗?破坏它的价值?或类似的东西?
谢谢