更新到Openrowset SQL SERVER 2008

JGu*_*ezC 5 openrowset sql-server-2008 sql-update

我正在尝试从本地查询对远程表执行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) 
Run Code Online (Sandbox Code Playgroud)

或者我可以做这样的选择:

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)
Run Code Online (Sandbox Code Playgroud)

但我没有提出更新的解决方案.那可能吗?

提前致谢!

And*_*y M 6

如果我理解你的意图,这应该让你去:

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 ...
;
Run Code Online (Sandbox Code Playgroud)

基本上,这与从查询更新本地表相同,只是在FROM子句中使用OPENROWSET而不是表名,并在UPDATE子句中指定其别名.

当然,远程查询应该是可更新的也很重要(例如,它应该从单个表返回结果),与使用OPENROWSET 插入时可插入的相同.