2011-11-15 4 views
2

私は各行にカンマで区切られたIDの数を含む列を持つExcelファイルを持っています。各行には別の列のテキストが含まれています。Excelファイルからカンマ区切りの値を個々の行に取得する方法は、順番にデータベースに挿入されますか?

IDs  Text 
1   This is a row of text 
2,3  Another row of text 
4,5,6  More text in this row 

Iは最初の列の各IDが自身の行に分割され、そしてテキストは、それが関連付けられているそれぞれのIDのために挿入されるように、データベースにテキストを挿入する必要があります。

データベースの結果は、たとえば次のようになります。

ID Text 
1 This is a row of text 
2 Another row of text 
3 Another row of text 
4 More text in this row 
5 More text in this row 
6 More text in this row 

Excel 2010またはSql Server 2008にはこれを行う機能がありますか?

それ以外の場合は、カンマ区切りの値を行に分割するExcelの機能がありますか?新しい列に分割できるツールがあることはわかっていますが、行が必要です。私は行にそれらを得ることができる場合、私は対応するIDと関連付けられたテキストを取得するcopypastaを行うことができます。

答えて

3

あなたはあなたのためにINSERT文を生成しますシンプルで小さなマクロを書くことができ、その後、あなただけコピーして管理スタジオにそれらを貼り付けることができます:

Dim i as Integer, j as Integer 
Dim ids as Variant 


For i = 0 To 100 
    ids = Split(ActiveSheet.Cells(i, 1).Value) 

    For j = 0 To UBound(ids) 
     ActiveSheet.Cells(i, 3 + j).Value = "INSERT INTO myTable VALUES (" & ids(j) & ", " ActiveSheet.Cells(i, 2).Value & ")"  
    Next j 
Next i 

はもちろん、書くためのより効率的な方法がありますループと分割ロジックがありますが、SQLを生成するためのユーティリティはすばやく簡単ですが、これはうまくいくはずです。

UPDATEは:おっと、そうでない場合は、あなたが以前のものの上に、各文字列を貼ります、出力の列のマッピングを「+ J」を追加しました:)

0

あなたはスプリット機能を持っている場合は、あなたが使用することができます上記のスクリプトを実行する前に所望の出力

select val, Text 
from ExcelTBL1 
cross apply dbo.split(ExcelTBL1.IDs,',') 

を取得するには、次の文は、例えばSSISのタスクを使用してExcelからSQL Serverへのステージングテーブルにデータをアップロードすることができます。 そして、あなたがSELECT ... statemtent

から分割機能の例については... INSERT INTOでSQL上で実行することができ、参照してください。 http://www.kodyaz.com/articles/t-sql-convert-split-delimeted-string-as-rows-using-xml.aspx http://www.kodyaz.com/articles/sql-server-string-split-tsql-clr-function-sample.aspx

そして、SSISのタスクは、カンマ区切りの値からデータをインポートするために参照先: http://www.kodyaz.com/articles/import-csv-flat-file-into-sql-server-using-ssis-integration-services.aspx http://www.kodyaz.com/articles/sql-server-import-data-sql-server-import-export-data-wizard-ssis-package.aspx

関連する問題