2

一部の CSV データを MS SQL データベースにインポートする方法を決定しようとしています。

残念ながら、複数のテーブルが関係しているため、見た目ほど単純ではありません。また、CSV から取得されるフィールドもあれば、固定値を持つフィールドもあります。

複数のテーブルを関連付けるという点では、私のロジックは次のようになります。

IF <select count(course_name) from tbl_courses WHERE course_name = 'value from csv'> GT 0
THEN
  ADD <data> to TBL_ITEM using PK from TBL_COURSES
ELSE
  CREATE ROW in TBL_COURSES WITH <data>
  ADD <data> to TBL_ITEM using PK from TBL_COURSES
END IF

CSV のフィールドを tbl_item にマップする方法はありますか (必要に応じて tbl_courses に行を追加しますか?)

4

2 に答える 2

1

基本的に、セットに基づいて考え始め、次の手順を実行します。

  1. CSV を一時テーブルにインポートします。

  2. 一時テーブルから選択してコーステーブルに挿入します。静的データも含めることができますが、重複したエントリが作成されないように区別してください。

  3. 一時テーブルから選択して項目テーブルに挿入します。コース テーブル PK は CSV データに依存します。CSV データの一部として一意のコース ID が既にある場合は、それで問題ありません。それ以外の場合は、挿入の一部としてサブクエリを実行できます。

これが役立つかどうかを説明しようとしている例です。明らかに courseData と itemData は実際にはフィールドのセットです...

-- setup for example
declare @course table (courseId int, courseData varchar(50))
declare @item table (itemId int, courseId int, itemData varchar(50))

declare @csvdata table (courseid int, coursedata varchar(50), itemid int, itemdata varchar(50))

insert into @csvdata 
values (1, 'a', 1, 'b'), (1, 'a', 2, 'c'), (2, 'b', 3, 'c')

-- the important bit
insert into @course
select distinct courseId, courseData
from @csvdata

insert into @item
select itemId, courseId, itemData
from @csvdata

select * from @course
select * from @item
于 2012-04-24T19:44:55.937 に答える
1

そのように直接インポートすることはできません。最初に CSV を一時テーブルにインポートする必要があります (名前は関係ありません。すべてを一括インポートするだけです)。

リレーショナル テーブルで CSV を使用できるようにしたら、任意の SQL を実行できます。そのようにして、任意のインポートプロセスを実行できます。

完了したら、一時テーブルを削除できます。

于 2012-04-24T19:33:06.817 に答える