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

您不需要遍历任何内容,因为您使用的是 SQL Server 2008,并且此版本支持该MERGE语句。

看看这里

或者简单地使用带有 from 子句的 update 并连接两个表。

于 2012-06-13T12:19:55.700 回答
1

如果您需要的是 upsert 功能,我强烈推荐Merge功能。

伪代码

   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 回答