这可能是一个noob问题,但是有一个很简单的方法可以将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]
有没有简单的方法可以做到这一点?
答案 0 :(得分:0)
将CSV中的所有数据加载到数据库表的简单方法是使用BULK INSERT
语句。您需要做的就是使用正确的参数(在您的情况下,FIELDTERMINATOR =',',ROWTERMINATOR =';')
BULK INSERT Customers
FROM 'c:\split.csv'
WITH
(FIELDTERMINATOR = ',',
ROWTERMINATOR = ';'
)
GO
第一次拆分后,您将获得表格格式的数据。因此,您可以使用greate方法将带有分隔字符串的列拆分为多个列,使用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
上的演示