2

csv ファイルのデータを一時テーブルに挿入し、対応する id 値のデータを別のテーブルに挿入する必要があります。データを作成して csv ファイルに挿入しました。csv ファイル内のすべてのレコードについて、他のテーブル内の対応するレコードのドーム データをループして挿入するにはどうすればよいですか。

CREATE TABLE #tbcompanies
(ID INT)
GO

BULK
INSERT #tbcompanies
FROM 'd:\ids.csv'
WITH
(
ROWTERMINATOR = '\n'
)

select * from #tbcompanies

drop table #tbcompanies
4

3 に答える 3

6

両方のテーブルに ID 列があると仮定すると、次のように他のテーブルを更新できます。

update  ot
set     col1 = tmp.col1
.       col2 = tmp.col2
from    @tbcompanies tmp
join    OtherTable ot
on      ot.ID = tmp.ID

更新に加えて、insert存在しない行が必要な場合は、merge ステートメントを検討してください。

; merge OtherTable as target
using   #tmpcompanies as source
on      target.id = source.id 
when    not matched by target then
        insert (id, col1, col2) values (source.id, source.col1, source.col2)
when    matched then
        update set col1 = source.col1, col2 = source.col2;
于 2012-06-13T12:18:29.170 に答える
1

MERGESQL Server 2008を使用しており、このバージョンはステートメントをサポートしているため、何もループする必要はありません。

こちらをご覧ください。

または、from句を指定してupdateを使用し、2つのテーブルを結合します。

于 2012-06-13T12:19:55.700 に答える
1

必要なアップサート機能の場合は、マージ機能を強くお勧めします。

擬似コード

   merge TargetTableName target
   using #tbcompanies tmp on tmp.idfield=target.idfield
   when matched then update......
   when not matched then insert...........
于 2012-06-13T12:21:05.433 に答える