• ベストアンサー

SQL Server 2000 - bulk insert

SQL Server 2000でのbulk insert とはどういうものなのでしょうか? csvなどをテーブルに一括で更新できてしまうものでイメージはよいのでしょうか?csvにヘッダーがある場合除くなどもできたりするのでしょうか? できれば、具体的なコマンドの書き方もご教示ください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

箇条書きで、わかる範囲で回答します。 >SQL Server 2000でのbulk insert とはどういうものなのでしょうか? 一言でいえばCSV形式のファイルをテーブルやビューに、一括して取り込むコマンドです。 CSV形式は、タブやカンマ区切りをはじめ、どんな項目区切り文字でも対応可能で、INSERT文で登録処理するよりもBULK INSERTの方が、高速に処理できることから、私は愛用しています。 >csvにヘッダーがある場合除くなどもできたりするのでしょうか? はい。できます。正式には、FIRSTROW というオプションを使って、データ読み込み開始行を指定することで、ヘッダ行を読み込まないようにすることができます。 例えば、1行目がヘッダ行、2行目以降がデータ行の場合は、FIRSTROW というオプションに「2」を指定することで、ヘッダ行を読み込むことなく、処理することができます。 詳しくは、 http://msdn.microsoft.com/ja-jp/library/ms188365.aspx をご覧下さい。 >できれば、具体的なコマンドの書き方もご教示ください。 どんなCSVファイルを読み込みたいか?にもよりますが、 今回のお話を聞いている限りの仕様だと、 -- タブ区切りのCSV BULK INSERT [dbo].[OutputTable] FROM 'c:\aaa.csv' WITH ( FIELDTERMINATOR ='\t', FIRSTROW = 2, ROWTERMINATOR = '\n' ) みたいな感じですね。 また、レスポンスを意識し、ある程度、1レコード長の長さが わかっているのであれば、BATCHSIZE というオプションを使用すると 高速に処理できることがあります。 詳しいことはすべて、マイクロソフトのMSDNに詳しい使い方を サンプル付きで掲載していますので、ご参考にしてみてください。 http://msdn.microsoft.com/ja-jp/library/ms188365.aspx

参考URL:
http://msdn.microsoft.com/ja-jp/library/ms188365.aspx

関連するQ&A

  • SQL SERVERの BULK INSERT

    SQL SERVERの BULK INSERTについて。 TESTというテーブルにtest.csvをBULK INSERTによりデータをインポートしようとしているのですが変数を使わずに下記のように書くと正常に動くのですが、 BULK INSERT TEST FROM 'C:\data\test.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ) 変数を使って下記のようにすると「不適切な構文があります。」とエラーとなってしまいます。 DECLARE @data varchar(100) SET @data = 'C:\data\test.csv' BULK INSERT TEST FROM @data WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ) 解決策を教えてください。

  • BULK INSERTについて

    CSVをバルクインサートでitemテーブルにBULK INSERTする際に、 下記のようなSQL文を使っているのですが、CSV内のブランク文字は 実行後にNULLになってしまいます。 やりたいことはNULLではなく空白文字("")にしたいのですが、 下記のSQL文をどのように変えればよいのでしょうか。 または、CSVを変更する方法でもよいです。 BULK INSERT item FROM 'c:\test.txt' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ); 大変お手数ですが、 わかる方がいらっしゃいましたらよろしくお願いいたします。

  • BULK INSERT でファイルが開けなくて困っています

    初めての質問なのでトンチンカンなこと言ってたらすみません。 SQL Server 2005のストアドプロシージャを使ってBulk InsertでSQL Server とは別のパソコンにあるcsvファイルをテーブルにインポートしようとしているのですが、「...を開けなかったので、一括読み込みできません。...アクセスが拒否されました。」とエラーが出てしまいます。ストアドプロシージャは別パソコンのVB2005からパラメータ(ファイルパス等)を与えて実行しています。 ファイルの保存先フォルダは共有にしています。 ちなみにSQL Server側のパソコンからストアドプロシージャを実行するとちゃんとインポートしてくれます。 パスワードや権限が関係してるんでしょうか? 長くなりましたが、よろしくお願い致します。

  • BULK INSERTのエラー取得は可能なのでしょうか?

    こんばんは。 お世話になります。 SQL Server初心者です。 現在、CSVファイルに出力された他のデータベース(Paradox)のデータをSQL Server2005に移行するためのツールを作成しています。 Paradoxでは、以下のように、(1)と(2)のレコードが存在した場合、重複エラーとならなかったのですが、SQL Serverでは、当然ながら、重複エラーとなってしまいます。  (1)aaaaa, 1, あいうえお  (2)AAAAA, 1, かきくけこ  ※aaaaaとAAAAAが主キーの場合 CSVファイルのレコードは、多いもので700万件も含まれ、これを1行読み込み、既存データか否かをチェックし、既存の場合はINSERTしないという処理を700万回繰り返すと、相当な時間がかかり、性能向上を求められています。 そのため、BULK INSERTを使用する方向で検討してみました。 しかし、CSVファイルに主キー重複したレコードが存在すると、エラーが返されますが、BULK INSERTでは、どのレコードでエラーになったかまでは取得することができません。 ずいぶん、調べてみたのですが、無理のようでした。 BULK INSERTでエラーとなる箇所を特定する方法は本当にないでしょうか? もし、無理ならば、何か他にエラー箇所を特定して速くINSERTするコマンド、方法はないでしょうか? お知恵をお借りしたく、よろしくお願いいたします。

  • Transact-SQLのBULK INSERTでエラーをキャッチしたい

    ・環境 WindowsXP Pro SQL Server2005 はじめまして。 Transact-SQLのBULK INSERTで、エラー(ファイルが存在しない等)が発生した場合に、専用の処理を行いたいと思っています。 ※BULK INSERTでエラーが発生したら、リターンコード100を返す等の処理を行いたいと思ってます 私の方で試したのは、BULK INSERTをBEGIN TRYでネストしエラーキャッチを行おうと思いましたがキャッチできず困っております。 以下、質問させてください。  ・BULK INSERTのエラーはエラーキャッチできないのか?できる場合その方法は?  ・エラーキャッチできない場合、他の方法でBULK INSERTエラー時の処理を行う方法はあるのか? お手数ですが、よろしくお願いします。

  • SQL Serverでのデータロードについて質問

    SQL Server初心者です。 CSVファイルのデータをテーブルにロードするにあたり、以下のような事をするにはどんな方法があるのでしょうか?  ケース1:CSVファイルのデータでテーブルを上書き  ケース2:主キーが一致するレコードがテーブル内に存在する       データはUPDATE,なければINSERT ケース1,2それぞれDB2でいうところのImportコマンドを使用した時のREPLACEモード及びINSERT_UPDATEモードのイメージです。 DB2のように簡単にはいかないものでしょうか。 よろしくお願いします。

  • SQL ServerにCSVをインポート

    SQL Server Express 2012にCSVファイルのデータをインポートさせたいと思っています。 SQL Server のデータのうち、主キーはdate型、その他はbit型、nvarchar型です。 SQL Serverのテーブルのデータには、#2013-01-01#, #False#, "あいう"などというデータがあります。 CSVは、Event.csvというデータです。 インポートするにあたって、BULK INSERTを利用しようとしています。 上記のデータで下記のコードをSQL Server Managemant Studio Expressで実行するとエラーとなります。 FROM 'D:\Business\Data\Event.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ); データを別の文字列にするべきなのか、#で日付やブール値を囲わない方がよいのか、あるいはカラム名の入ったCSVを用意するべきなのかなど、疑問が多いのですが、実際はどうあるべきなのでしょうか。 なお、上記のデータはもともとExcel のデータをVBAを使ってCSVファイルに出力したものなので、CSVの形式を別の状態のデータに変換することはできます。 もともとの目的は、ExcelのデータをSQL Serverのデータにインポートしたいだけです。 よろしくお願い致します。

  • BULK INSERT カンマ区切り

    以下のようなカンマ区切りのCSVファイル "aaa","bbb","cccc" をMSDEにインポートしたいと考えており、バッチでosqlを利用してBULK INSERT処理をしています。 CSVファイルには以下のように「,」、「"」も入る可能性があります。(「"」の場合は「""」で入る) "aa,a","b""bb","cccc" このような場合、BULK INSERTで可能な方法はありますでしょうか。 バッチのみで実行することが条件です。 ご存知の方がいましたらご教授頂けると幸いです。

  • BULK INSERTで失敗

    SQL Server2000のSQL クエリアナライザから、 BULK INSERTを行おうとすると 以下のエラーメッセージが出力されます。 ------------------------------------- サーバー : メッセージ 7302、レベル 16、状態 1、行 1 OLE DB プロバイダ 'BULKIMPORTSTREAM' のインターフェイスを作成できませんでした。 OLE DB エラー トレース [Non-interface error: CoCreate of DSO for BULKIMPORTSTREAM returned 0x8007045a]。 ------------------------------------- 何が不足しているのでしょうか.

  • SQL INSERTの使い方を教えてください

    vb2008でアクセスへデータを書き込む部分のコードを書こうとしているのですが、SQLのINSERT構文を使って連続した10レコードをテーブルへINSERTしたいのですが1つわからないところがあります。例えば、あるフィールドで、1番目のレコードだけアイテムが入り、残りは書き込む必要がない場合、Do~Loopなど使用しINSERT構文にて書き込み処理する場合、どのように条件わけするとすっきり書けるでしょうか・・・?いい感じのロジックがあればご教授願います。