Date: Sun, 19 Sep 2004 18:36:08 +0900 (JST)
From: who@sub.example.jp
水口様、堀川様 レスありがとうございます。
まとめレスですいません。
それからひとつ疑問点が出ましたのでよろしければお願いします。
水口様
》TRUNCATE TABLEを使って削除すれば、ログには残らないと思います。あと、BCP
》の変わりにBULK INSERTを使うと、すべての処理をOSQLで行えるのではないでしょ
》うか?
アドバイスありがとうございます。早速、TRUNCATE TABLEとBULK INSERTを
しらべて処理を実行してみました。おかげさまでだいたいうまく行きました。
osqlの文ひとつでまとめられるのでソースも読みやすくて良いです。
堀川様
》このデータの置き換え仕様が詳しくわからないと、何とも言えません
》たた単純に、新規のレコードを100万件取り込むのと様子が違うので。
》
》場合によっては、100万件のデータを作るほうで、何らかの考慮を
》するのが良いかもしれないです
本社に某ベンダー製のデータウェアハウスがあり約300万件の顧客データが
格納されております。このうち支店で必要とされる顧客データを対象レコード、
項目共に絞り込みSQL Serverへインポートし、イントラネット経由で各支店に
て検索できるようにする予定です。(データマートみたいなイメージです)
データウェアハウスから顧客データのCSVを作成する方法はVBSでADO(ODBC経由)
を使用します。VBS内でSQLを発行してからテキストデータを加工するのでデー
タの並び順、データ形式等は容易に加工できます。
また、元データはデータウェアハウスに存在するのでトランザクションログは
不要となります。単純に毎回テーブルの中身をリプレースするのが希望です。
今回、水口様にアドバイスをいただいて以下のようなロジックを作成しました。
問題なく動作したのですが、気になったのはBULK INSERT実行時のインデック
スの扱いです。インデックスは一旦削除しなくても作成されるのでしょうか?
インデックスの削除&再作成は処理の高速化の為に必要?それとも不要?
実は主キーも削除&再作成をしようと思ったのですがエラーが出て不可でした。
Webの情報で(どこかは失念)bcp,BULK INSERTはインデックス情報は生成しな
いという書き込みを読んだので少々不安です。下記処理では主キーについては
再作成してないので。
BULK INSERT時のインデックスの扱いについてアドバイスいただける方いまし
たら宜しくお願いいたします。また下記の処理についてアドバイスがあれば
教えていただけると助かります。
--------------------------------------------
--- <<DB名、テーブル名等の名称は変えてあります>>
--
Use DB1
GO
-- インデックスを削除
DROP INDEX dbo.顧客マスタ.顧客マスタ_TELE_IDX
DROP INDEX dbo.顧客マスタ.顧客マスタ_NAME_IDX
GO
-- データの削除
TRUNCATE TABLE 顧客マスタ
GO
-- CSVデータよりインポート
BULK INSERT DB1.dbo.[顧客マスタ]
FROM 'C:\MsSql7\Csv\顧客マスタ.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
MAXERRORS = 20
)
GO
-- インデックスの作成
CREATE INDEX 顧客マスタ_TELE_IDX ON dbo.顧客マスタ(TELE)
CREATE INDEX 顧客マスタ_NAMEN_IDX ON dbo.顧客マスタ(NAME)
GO
-----------------------------------------------------
鈴木<who@sub.example.jp>
[MSDE/SQLServerに関して、今、どんなことにお困りですか?] |
よろしければお困りの内容を、電子メールで教えて下さい。 |
質問を電子メールで作成する
|
[ウィンドを閉じる][MSDE/SQLServer FAQ ][MSDE / MSDE2000 技術サポート情報一覧]
|