MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
SQL Server - BULK INSERTのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
SQL Server - BULK INSERT
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == <code>BULK INSERT</code>文は、SQL Serverで大量のデータを高速にテーブルに取り込むための機能である。<br> 通常のINSERT文と比較して、効率的にデータを取り込むことができる。<br> <br> <syntaxhighlight lang="tsql"> -- 使用例 BULK INSERT TargetTable FROM 'C:\Data\source.txt' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ); </syntaxhighlight> <br> 重要な特徴として、BULK INSERT文はトランザクションログへの書き込みを最小限に抑えることで高速な処理を実現している。<br> これは、大量データの取り込み時に大きな効果を発揮する。<br> <br> データソースとしては、カンマ区切り (CSV) や タブ区切り (TSV) 等の形式のテキストファイルが使用できる。<br> <code>FIELDTERMINATOR</code>オプションは列の区切り文字、<code>ROWTERMINATOR</code>オプションは行の区切り文字を指定する。<br> <br> パフォーマンスに影響を与える重要な要素として、以下に示すような設定がある。<br> <syntaxhighlight lang="tsql"> WITH ( BATCHSIZE = 1000, TABLOCK, CHECK_CONSTRAINTS = OFF, FIRE_TRIGGERS = OFF ) </syntaxhighlight> <br> これらのオプションを適切に設定することにより、パフォーマンスを向上させることができる。<br> 特に、<code>TABLOCK</code>オプションは、テーブルレベルでのロックを取得することにより、行レベルのロックによるオーバーヘッドを避けることができる。<br> <br> <u>※注意</u><br> <u>BULK INSERT文を使用する場合は、ファイルに対する適切なアクセス権限が必要となる。</u><br> <u>また、データファイルの形式とテーブルのスキーマが正確に一致している必要がある。</u><br> <br> エラーハンドリングについては、<code>ERRORFILE</code>オプションを使用することにより、取り込みに失敗した行を別ファイルに出力して後から確認することができる。<br> <syntaxhighlight lang="tsql"> WITH ( ERRORFILE = 'C:\Errors\error.txt', MAXERRORS = 10 ) </syntaxhighlight> <br> BULK INSERT文は、大量データの取り込みに非常に効果的なツールであるが、適切な設定と事前準備が重要となる。<br> <br><br> == BULK INSERTの例 == 下記は、CSVファイル(カンマ区切り)をインポートする際の例である。<br><br> * 文字コードがShift-JISの場合 <syntaxhighlight lang="tsql"> BULK INSERT T_Table FROM 'D:\UnicodeFile.txt' WITH ( DATAFILETYPE = 'char', FIELDTERMINATOR = ',' ); GO </syntaxhighlight> <br> * 文字コードがUNICODEの場合 (SQL Server 2014 R2以前) *: ただし、SQL Server 2014 R2以前では、下記のクエリを実行しても UTF-8形式のファイルは取り込めない。 *: (UTF-8固有の文字が無いUTF-8形式のファイルはインポートできる) <syntaxhighlight lang="tsql"> BULK INSERT T_Table FROM 'D:\UnicodeFile.txt' WITH ( DATAFILETYPE = 'widechar', FIELDTERMINATOR = ',' ); GO </syntaxhighlight> <br> * 文字コードがUTF-8の場合 (SQL Server 2014 R2以降) *: SQL Server 2014 R2以降では、UTF-8形式のファイルをインポートすることが出来る。 <syntaxhighlight lang="tsql"> BULK INSERT T_Table FROM 'D:\UnicodeFile.txt' WITH ( DATAFILETYPE = 'char', CODEPAGE = '65001', FIELDTERMINATOR = ',' ); GO </syntaxhighlight> <br><br> == エラーハンドリング == 基本的なエラーハンドリングの設定を以下に示す。<br> <br> <syntaxhighlight lang="tsql"> BULK INSERT TargetTable FROM 'C:\Data\source.txt' WITH ( ERRORFILE = 'C:\Errors\error.txt', MAXERRORS = 10, FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ); </syntaxhighlight> <br> * ERRORFILEオプション *: エラーが発生した行の詳細情報を指定されたファイルに出力する。 *: このファイルには、エラーの発生した行番号、エラーの種類、具体的なエラーメッセージ等が記録される。 *: <br> * MAXERRORSオプション (重要) *: 許容するエラーの最大数を指定する。 *: この数を超えるとBULK INSERT処理全体が中止される。 *: 例えば、MAXERRORSオプションを10に設定した場合、11個目のエラーが発生した時点で処理が停止する。 *: <br> * CHECK_CONSTRAINTSオプション *: データの検証に関するエラーハンドリングの設定である。 *: このオプションをONに設定する場合、制約違反のチェックが行われる。 *: ただし、パフォーマンスへの影響があるため、データの信頼性が確保されている場合はOFFにする。 *: <br> * KEEPNULLSオプション *: 空の文字列をNULLとして扱うかどうかを制御する。 *: これにより、NULL制約に関連するエラーを適切に処理することができる。 <br> また、詳細なエラー情報を取得する場合は、TRY-CATCHブロックを使用する。<br> <syntaxhighlight lang="tsql"> BEGIN TRY BULK INSERT TargetTable FROM 'C:\Data\source.txt' WITH ( ERRORFILE = 'C:\Errors\error.txt', MAXERRORS = 10 ); END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_MESSAGE() AS ErrorMessage, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState; END CATCH </syntaxhighlight> <br> 実務では、エラーファイルの内容を定期的に監視して、必要に応じて修正アクションを取ることが推奨される。<br> エラーファイルには、以下に示すような情報が含まれる。<br> * エラーが発生した行番号 * エラーの発生した列 * エラーの種類 (データ型の不一致、制約違反等) * 具体的なエラーメッセージ <br> エラー発生時のロールバック動作についても理解が重要である。<br> <code>BATCHSIZE</code>オプションを使用している場合、エラーが発生したバッチのみがロールバックされて、それ以前に正常に取り込まれたデータは保持される。<br> <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:SQL_Server]]
SQL Server - BULK INSERT
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse