印刷用ページ       送信     
クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
SQL Server
Microsoft SQL Server 2000
SDK ドキュメント
SQL Server の管理
bcp と BULK INSERT の使用
データのコピー
 データ ファイルから SQL Server へのデータのコピー

  低帯域幅での表示をオンにする
SQL Server の管理
データ ファイルから SQL Server へのデータのコピー

データ ファイルから SQL Server へのデータのコピー

Microsoft® SQL Server™ のインスタンスにデータ ファイルを一括コピーするには、次のガイドラインに従います。

  • 通常、完全復旧モデルを使用している場合で、インデックスのないテーブルにデータを一括コピーするときは、復旧モデルを一括ログ モデルに設定します。

    この設定では、行の挿入がログに記録されなくなるため、トランザクション ログの領域が不足するのを防ぐことができます。システム管理者またはデータベース所有者は、このオプションを設定できます。詳細については、「ログに記録する一括コピー操作と最小限でログに記録する一括コピー操作」を参照してください。

  • テーブルの既存のデータ量に比較して大量のデータを読み込む場合には、一括コピー操作を実行する前にテーブルでインデックスを削除すると、処理が速くなります。

    テーブルの既存のデータ量に比較して少量のデータを読み込む場合には、インデックスを削除する必要はありません。これは、インデックスを再構築する時間が、一括コピー操作を実行する時間よりも長くなることがあるためです。詳細については、「」を参照してください。

  • bcp (または BULK INSERT ステートメントを使用する場合にはクエリ ツール) によって SQL Server にログインするために使用するユーザー アカウントに、テーブル上に対する SELECT 権限と INSERT 権限が割り当てられていることを確認します。

      BULK INSERT ステートメントを実行できるのは、固定サーバー ロール sysadmin のメンバだけです。

  • 復旧モデルが単純モデルの場合は、完全バックアップまたは差分バックアップをお勧めします。復旧モデルが一括ログ復旧モデルおよび完全復旧モデルの場合は、ログ バックアップで十分です。詳細については、「バックアップ操作と復元操作」を参照してください。

  • bcp ユーティリティまたは BULK INSERT ステートメントでデータ ファイルからテーブルにデータを正常に一括コピーするには、データ ファイルの終端文字を確認し、指定する必要があります。

  ASCII データ ファイル内に隠し文字があると、SQL Server のインスタンスにデータを一括コピーするときに問題が発生し、"unexpected null found" というエラー メッセージが表示されることがあります。多くのユーティリティとテキスト エディタは、隠し文字を表示します。これは、一般にデータ ファイルの最後にあります。これらの文字を検索して、取り除けば問題は解決します。

Newpubs.dat ファイル:

1111,Stone Age Books,Boston,MA,USA
2222   ,Harley & Davidson,Washington,DC,USA
3333   ,Infodata Algosystems,Berkeley,CA,USA

データ ファイルは、すべて文字データであるため、次のオプションとスイッチを指定する必要があります。

一括コピー オプション bcp ユーティリティ スイッチ BULK INSERT 句
文字モード形式 -c DATAFILETYPE = 'char'
フィールド終端文字 -t FIELDTERMINATOR
行終端文字 -r ROWTERMINATOR

Newpubs.dat ファイルでは、行の各フィールドはカンマ (,) で終わり、各行は改行文字 (\n) で終わっています。

次の例の publishers2 テーブルは、次のコマンドを実行して作成できます。

USE pubs
GO
SELECT * INTO publishers2 FROM publishers
GO

Newpubs.dat から publishers2 にデータを一括コピーするコマンドは、次のようになります。

bcp pubs..publishers2 in newpubs.dat -c -t , -r \n -Sservername -Usa -Ppassword

そのほか、SQL クエリ アナライザなどのクエリ ツールから BULK INSERT ステートメントを使用して、データを一括コピーすることもできます。

BULK INSERT pubs..publishers2 FROM 'c:\newpubs.dat'
WITH (
   DATAFILETYPE = 'char',
   FIELDTERMINATOR = ',',
   ROWTERMINATOR = '\n'
)

これで、Newpubs.dat ファイルのデータは、publishers2 に追加されました。

Pub_id pub_name city state Country
------ ---------------- ---------- ----- -----
0736 New Moon Books Boston MA USA
0877 Binnet & Hardley Washington DC USA
1111 Stone Age Books Boston MA USA
1389 Algodata Infosystems Berkeley CA USA
1622 Five Lakes Publishing Chicago IL USA
1756 Ramona Publishers Dallas TX USA
2222 Harley & Davidson Washington DC USA
3333 Infodata Algosystems Berkeley CA USA
9901 GGG&G München   Germany
9952 Scootney Books New York NY USA
9999 Lucerne Publishing Paris France

ID 値を含むデータのコピー

bcp ユーティリティと BULK INSERT ステートメントでは、ID 値を含むデータ ファイルを SQL Server のインスタンスに一括コピーできます。SQL Server による ID 値の割り当てを防ぐために、bcp ユーティリティには -E スイッチを指定でき、BULK INSERT ステートメントには KEEPIDENTITY 句を指定できます。データ ファイルの行がテーブルに一括コピーされている間に、SQL Server が一意の ID 値を自動的に割り当てることはありません。ID 値は、データ ファイルから取得されます。

これらのオプションを指定しない場合には、インポートされるデータ ファイルの ID 列の値は無視され、SQL Server はテーブルの作成中に指定された seed の値と増分値に基づいて、一意の値を自動的に割り当てます。データ ファイルがテーブルに ID 列の値を含んでいない場合には、データをインポートするときにテーブルの ID 列をスキップすることを示すために、フォーマット ファイルを使用します。SQL Server では自動的に一意な値をこの列に割り当てます。

イメージ データのインポート

データ ファイルを SQL Server のインスタンスに image データとして一括コピーすることができます。bcp ユーティリティを使用して Test.doc データ ファイルを pubs データベースの bitmap テーブルにロードするコマンドは、次のようになります。

bcp pubs..bitmap in test.doc -Usa -Ppassword -Sservername

bcp プロンプト:

Enter the file storage type of field c1 [image]:
Enter the prefix length of field c1 [4]: 0
Enter length of field c1 [4096]: 5578
Enter the field terminator [none]:

この例で、データ ファイルは列 c1 にロードされ、5578 はデータ ファイルの長さを示します。

BULK INSERT ステートメントを使用する場合には、フォーマット ファイルを最初に作成して、形式情報を指定するために使用する必要があります。フォーマット ファイルを作成するには、bcp ユーティリティを使用します。

bcp pubs..bitmap out c:\bitmap.txt -Sservername -Usa -Ppassword

bcp ユーティリティは、bitmap の各列に対してファイル保存形式、プレフィックス長、フィールド長、およびフィールド終端文字の指定を求めるメッセージを表示します。次の表は、c1 列の値を示しています。

問い合わせ
ファイル保存形式 Image
プレフィックス長 0
フィールド長 5578
フィールド終端文字 なし

Bcp.fmt ファイル:

8.0
1
1   SQLIMAGE   0   5578      ""      1   c1

BULK INSERT ステートメントを使用して、Test.doc データ ファイルを pubs データベースの bitmap テーブルに一括コピーするには、SQL クエリ アナライザなどのクエリ ツールから次のコマンドを実行します。

BULK INSERT pubs..bitmap FROM 'c:\test.doc'
WITH (
   FORMATFILE = 'c:\Bcp.fmt'
)

  DEFAULT 値を持つ textntext、および image 列にデータを一括コピーすることはできません。

関連項目

フィールドが少ないデータ ファイルの使用

© 2009 Microsoft Corporation. All rights reserved. 使用条件  |  商標  |  プライバシー
Page view tracker