导入一个csv文件,其中包含MS SQL Server中多个表的数据

时间:2014-10-16 17:20:47

标签: sql-server sql-server-2008 sql-server-2008-r2

我有以下表格(简化问题):

数据:

Id
Serialnumber
Value
AddressId (ForeignKey)

地址:

Id
Street
ZipCode
City
...

现在我有一个包含数据的csv文件,遗憾的是两个表:

Serialnumber,Value,Street,ZipCode,City, ...
12345,1140,Fakestreet 3,12345,New York
5678,830,Fakestreet 87,12345,New York

有没有办法将这样的csv文件导入Microsoft SQL Server(2008)?服务器本身必须先插入地址,然后使用Addresses表的主键作为Data表中的外键。

2 个答案:

答案 0 :(得分:1)

您需要将CSV文件导入到如下所示的临时表中,然后相应地处理它。

IF (OBJECT_ID('StagingData') IS NULL)
    CREATE TABLE StagingData
    (  
       SerialNumber int,
       Value int,
       Street varchar(256),
       ZipCode int,
       City varchar(256)

    )

TRUNCATE table StagingData

BULK
INSERT StagingData
FROM 'c:\csvtest.txt'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO

答案 1 :(得分:0)

  1. 如果你有空间,我肯定会将整个CSV导入到临时表,然后使用SQL语句插入目标表。登台表可以是#temp表,也可以是专门为登台创建的单独数据库。
  2. 如果没有,则可以设置包含所有字段的虚拟表,并将CSV中的INSERT定义为虚拟表。然后使用插入实际目标表而不是虚拟表的INSTEAD触发器。请记住,触发器将在同一批次中接收多个插入,因此需要处理多个插入。因此,将Address主键捕获到@table变量。