我正在尝试从本地查询对远程表执行UPDATE操作。显然,我知道应该使用OPENROWSET,但我不知道该怎么做。
我知道您可以执行以下操作将其插入OPENROWSET:
set @cadsql = convert(varchar(max),
'insert into openrowset(''SQLOLEDB'','''+@cadcon+''','+@bd+'.ctoxtractor.lm_vehiculos) ' + char(13) +
' (cuenta,corporativo,economico,ctatipotractor,sctatipotractor,ultcambio,ciausu,usuario,estatusoper) ' + char(13) +
'select 423,fv.vehic,fv.numeco,9802,0,getdate(),0,''ADMIN'',fv.estatusoper ' + char(13) +
'from ficvehic fv ' + char(13) +
'order by fv.vehic ')
exec (@cadsql)
或者我可以做这样的选择:
SET @cadsql = 'SELECT * FROM OPENROWSET(''sqloledb'',''driver=sql server;server='+@server+';database='+ @database +';uid='+@user+';pwd='+@password+''',' +
'''SELECT Column1, column2,...
FROM table'')'
INSERT INTO another_table
exec (@cadsql)
但是我还没有想出更新的解决方案。那可能吗?
提前致谢!
最佳答案
如果我正确理解了您的意图,这应该可以帮助您:
UPDATE target
SET
target.column = query.value,
...
FROM OPENROWSET(
'provider',
'connection string',
'SELECT columns FROM yourtable'
) AS target
INNER JOIN (
your local query
) AS query
ON
target.column = query.column
AND ...
;
基本上,这与从查询更新本地表相同,只是使用OPENROWSET而不是FROM子句中的表名,并在UPDATE子句中指定其别名。
当然,远程查询应该是可更新的(例如,它应该从单个表返回结果),这一点也很重要,与使用OPENROWSET插入时可插入的查询相同。