1

这可能是一个菜鸟问题,但是有没有一种很好的简单方法可以ROWS从一个选择语句插入COLUMNS另一个表?

我不只是在谈论做一个INSERT / SELECT.

我有一个将一些 CSV 拆分为行的函数。所以说我有两行这样的数据

joe,bloggs,joe.bloggs@domain.fake;jane,soap,jane.soap@domain.notreal;

我先用分号分隔,然后用逗号分隔

第一次拆分调用的结果

Id Data
1  joe,bloggs,joe.bloggs@domain.fake
2  jane,soap,jane.soap@domain.notreal

在每一个上,我再次运行拆分功能

Id Data
1  Joe 
2  Bloggs
3  joe.bloggs@domain.fake

有了这个返回的数据,我想做一个如下所示的插入语句

INSERT INTO Customers (@first,@last,@email) 
SELECT [row1].[col2],[row2].[col2],[row3].[col2]

有什么简单的方法可以做到这一点吗?

4

1 回答 1

0

将所有数据从 CSV 加载到数据库表的简单方法是使用BULK INSERT语句。您需要做的就是使用正确的参数(在您的情况下 FIELDTERMINATOR = ',', ROWTERMINATOR = ';')

BULK INSERT Customers
FROM 'c:\split.csv'
WITH
(FIELDTERMINATOR = ',',
 ROWTERMINATOR = ';'
 )
GO

第一次拆分后,您有一个表格格式的数据。因此,您可以使用使用 XML 方法将带有分隔字符串的列拆分为多个列的出色方法

INSERT dbo.Customers([first], [last], [email])
SELECT Split.a.value('/M[1]', 'VARCHAR(100)' ) AS [first],
       Split.a.value('/M[2]', 'VARCHAR(100)' ) AS [last],
       Split.a.value('/M[3]', 'VARCHAR(100)' ) AS [email]
FROM (SELECT CAST('<M>' + REPLACE(Data , ',' , '</M><M>' ) + '</M>' AS XML) AS xmlData
      FROM dbo.testCSV
      ) AS x CROSS APPLY XMLDATA.nodes('.') AS Split(a)

演示SQLFiddle

于 2013-11-06T11:00:01.097 回答