1

これはちょっと初歩的な質問かもしれませんがROWS、select ステートメントからCOLUMNS別のテーブルに挿入する簡単な方法はありますか?

私はただやることについて話しているのではありませんINSERT / SELECT

一部の CSV を行に分割する関数があります。このような2行のデータがあるとします

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 に答える