5

ローカル クエリからリモート テーブルに対して 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)

しかし、私は更新の解決策を思いつきませんでした。それは可能ですか?

前もって感謝します!

4

4 に答える 4

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 ...
;

基本的に、これはクエリからローカル テーブルを更新する場合と同じで、FROM 句でテーブル名の代わりに OPENROWSET を使用し、UPDATE 句でそのエイリアスを指定するだけです。

もちろん、OPENROWSET を使用して挿入するときに挿入可能であるのと同様に、リモート クエリが更新可能であること(たとえば、単一のテーブルから結果を返す必要があること) も重要です。

于 2013-09-17T09:03:41.550 に答える