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)
但我没有提出更新的解决方案.那可能吗?
提前致谢!
如果我理解你的意图,这应该让你去:
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 插入时可插入的相同.