Bulk Insert命令具體
BULK INSERT以用戶指定的格式復制一個數據文件至數據庫表或視圖中。
語法:
- BULK? INSERT ?[?[? 'database_name' .][? 'owner' ?].]{? 'table_name' ? FROM ? 'data_file' ?}???? ??
- WITH ??( ??
- ????????[?BATCHSIZE?[?=?batch_size?]?],???? ??
- ????????[?CHECK_CONSTRAINTS?],???????? ??
- ????????[?CODEPAGE?[?=? 'ACP' ?|? 'OEM' ?|? 'RAW' ?|? 'code_page' ?]?], ??
- ????????[?DATAFILETYPE?[?=? 'char' ?|? 'native' |? 'widechar' ?|? 'widenative' ?]?],???????????? ??
- ????????[?FIELDTERMINATOR?[?=? 'field_terminator' ?]?], ??
- ????????[?FIRSTROW?[?=?first_row?]?], ??
- ????????[?FIRE_TRIGGERS?], ??
- ????????[?FORMATFILE?=? 'format_file_path' ?], ??
- ????????[?KEEPIDENTITY?], ??
- ????????[?KEEPNULLS?], ??
- ????????[?KILOBYTES_PER_BATCH?[?=?kilobytes_per_batch?]?],??? ??
- ????????[?LASTROW?[?=?last_row?]?], ??
- ????????[?MAXERRORS?[?=?max_errors?]?], ??
- ????????[? ORDER ?(?{? column ?[? ASC ?|? DESC ?]?}?[?,...n?]?)?],?? ??
- ????????[?ROWS_PER_BATCH?[?=?rows_per_batch?]?], ??
- ????????[?ROWTERMINATOR?[?=? 'row_terminator' ?]?],?????????? ??
- ????????[?TABLOCK?], ??
- )??
參數:
'database_name'
是包括指定表或視圖的數據庫的名稱。假設未指定,則系統默覺得當前數據庫。
'owner'
是表或視圖全部者的名稱。當運行大容量復制操作的用戶擁有指定的表或視圖時,owner 是可選項。假設沒有指定 owner 而且運行大容量復制操作的用戶不擁有指定的表或視圖,則 Microsoft? SQL Server? 將返回錯誤信息并取消大容量復制操作。
'table_name'
是大容量復制數據于當中的表或視圖的名稱。僅僅能使用那些全部的列引用同樣基表所在的視圖。有關向視圖中復制數據的限制的很多其它信息,請參見 INSERT。
'data_file'
是數據文件的完整路徑,該數據文件包括要拷貝到指定表或視圖的數據。BULK INSERT 從磁盤復制數據(包括網絡、軟盤、硬盤等)。 data_file 必須從運行 SQL Server 的server指定有效路徑。假設 data_file 是遠程文件,則請指定通用命名規則 (UNC) 名稱。
BATCHSIZE [ = batch_size ]
指定批處理中的行數。每一個批處理作為一個事務復制至server。SQL Server提交或回滾(在失敗時)每一個批處理的事務。默認情況下,指定數據文件里的全部數據是一個批處理。
CHECK_CONSTRAINTS
指定在大容量復制操作中檢查 table_name 的不論什么約束。默認情況下,將會忽略約束。
CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ]
指定該數據文件里數據的代碼頁。僅當數據含有字符值大于 127 或小于 32 的 char、varchar 或 text 列時,CODEPAGE 才是適用的。CODEPAGE 值 描寫敘述 ACP char、varchar 或 text 數據類型的列從 ANSI/Microsoft Windows? 代碼頁 ISO 1252 轉換為 SQL Server 代碼頁。 OEM(默認值) char、varchar 或 text 數據類型的列被從系統 OEM 代碼頁轉換為 SQL Server 代碼頁。 RAW 并不進行從一個代碼頁到還有一個代碼頁的轉換;這是最快的選項。 code_page 特定的代碼頁號碼,比如 850。
DATAFILETYPE [ = {'char' | 'native' | 'widechar' | 'widenative' } ]
指定 BULK INSERT 使用指定的默認值運行復制操作。DATAFILETYPE 值 描寫敘述 char(默認值) 從含有字符數據的數據文件運行大容量復制操作。 native 使用 native(數據庫)數據類型運行大容量復制操作。要裝載的數據文件由大容量復制數據創建,該復制是用 bcp 有用工具從 SQL Server 進行的。 widechar 從含有 Unicode 字符的數據文件里運行大容量復制操作。 widenative 運行與 native 同樣的大容量復制操作,不同之處是 char、varchar 和 text 列在數據文件里存儲為 Unicode。要裝載的數據文件由大容量復制數據創建,該復制是用 bcp 有用工具從 SQL Server 進行的。該選項是對 widechar 選項的一個更高性能的替代,而且它用于使用數據文件從一個運行 SQL Server 的計算機向還有一個計算機傳送數據。當傳送含有 ANSI 擴展字符的數據時,使用該選項以便利用 native 模式的性能。
FIELDTERMINATOR [ = 'field_terminator' ]
指定用于 char 和 widechar 數據文件的字段終止符。默認的字段終止符是 /t(制表符)。
FIRSTROW [ = first_row ]
指定要復制的第一行的行號。默認值是 1,表示在指定數據文件的第一行。
FIRE_TRIGGERS
指定目的表中定義的不論什么插入觸發器將在大容量復制操作過程中運行。假設沒有指定 FIRE_TRIGGERS,將不運行不論什么插入觸發器。
FORMATFILE [ = 'format_file_path' ]
指定一個格式文件的完整路徑。格式文件描寫敘述了含有存儲響應的數據文件,這些存儲響應是使用 bcp 有用工具在同樣的表或視圖中創建的。格式文件應該用于下面情況: 數據文件含有比表或視圖很多其它或更少的列。列使用不同的順序。列切割符發生變化。數據格式有其它的改變。通常,格式文件通過 bcp 有用工具創建而且依據須要用文本編輯器改動。有關很多其它信息,請參見 bcp 有用工具。
KEEPIDENTITY
指定標識列的值存在于導入文件里。假設沒有指定 KEEPIDENTITY,在導入的數據文件里此列的標識值將被忽略,而且 SQL Server 將依據表創建時指定的種子值和增量值自己主動賦給一個唯一的值。假如數據文件不含該表或視圖中的標識列,使用一個格式文件來指定在導入數據時,表或視圖中的標識列應被忽略;SQL Server 自己主動為此列賦予唯一的值。有關具體信息,請參見 DBCC CHECKIDENT。
KEEPNULLS
指定在大容量復制操作中空列應保留一個空值,而不是對插入的列賦予默認值。
KILOBYTES_PER_BATCH [ = kilobytes_per_batch ]
指定每一個批處理中數據的近似千字節數(KB)。默認情況下,KILOBYTES_PER_BATCH 未知。
LASTROW [ = last_row ]
指定要復制的最后一行的行號。默認值是 0,表示指定數據文件里的最后一行。
MAXERRORS [ = max_errors ]
指定在大容量復制操作取消之前可能產生的錯誤的最大數目。不能被大容量復制操作導入的每一行將被忽略而且被計為一次錯誤。假設沒有指定 max_errors,默認值為 0。
ORDER ( { column [ ASC | DESC ] } [ ,...n ] )
指定數據文件里的數據怎樣排序。假設裝載的數據依據表中的聚集索引進行排序,則能夠提高大容量復制操作的性能。假設數據文件基于不同的順序排序,或表中沒有聚集索引,ORDER 子句將被忽略。給出的列名必須是目的表中有效的列。默認情況下,大容量插入操作假設數據文件未排序。n是表示能夠指定多列的占位符。
ROWS_PER_BATCH [ = rows_per_batch ]
指定每一批處理數據的行數(即 rows_per_bacth)。當沒有指定 BATCHSIZE 時使用,導致整個數據文件作為單個事務發送給server。server依據 rows_per_batch 優化大容量裝載。默認情況下,ROWS_PER_BATCH 未知。
ROWTERMINATOR [ = 'row_terminator' ]
指定對于 char 和 widechar 數據文件要使用的行終止符。默認值是 /n(換行符)。
TABLOCK
指定對于大容量復制操作期間獲取一個表級鎖。假設表沒有索引而且指定了 TABLOCK,則該表能夠同一時候由多個client裝載。默認情況下,鎖定行為是由表選項 table lock on bulk load 決定的。僅僅在大容量復制操作期間控制鎖會降低表上的鎖爭奪,極大地提高性能。凝視BULK INSERT 語句能在用戶定義事務中運行。對于一個用 BULK INSERT 語句和 BATCHSIZE 子句將數據裝載到使用多個批處理的表或視圖中的用戶定義事務來說,回滾它將回滾全部發送給 SQL Server 的批處理。權限僅僅有 sysadmin 和 bulkadmin 固定server角色成員才干運行 BULK INSERT。
演示樣例本例從指定的數據文件里導入訂單具體信息,該文件使用豎杠 (|) 字符作為字段終止符,使用 |/n 作為行終止符。
- BULK? INSERT ?Northwind.dbo.[ Order ?Details]??? FROM ? 'f:/orders/lineitem.tbl' ?? ??
- WITH ?( ??
- ?????FIELDTERMINATOR?=? '|' ,????????? ??
- ?????ROWTERMINATOR?=? '|/n' ?????? ??
- )??
本例指定 FIRE_TRIGGERS 參數。
- BULK? INSERT ?Northwind.dbo.[ Order ?Details]??? FROM ? 'f:/orders/lineitem.tbl' ??? ??
- WITH ?(? ??
- ?????FIELDTERMINATOR?=? '|' ,???????? ??
- ?????ROWTERMINATOR?=? ':/n' ,???????? ??
- ?????FIRE_TRIGGERS?????? ??
- ) ??
- ============================================================= ??
- BULK? INSERT ? ??
- ???[?database_name?.?[?schema_name?]?.?|?schema_name?.?]?[?table_name?|?view_name?]? ??
- ?????? FROM ? 'data_file' ? ??
- ?????[? WITH ? ??
- ????????(? ??
- ???[?[?,?]?BATCHSIZE?=?batch_size?]???? --BATCHSIZE指令來設置在單個事務中能夠插入到表中的記錄的數量 ??
- ???[?[?,?]?CHECK_CONSTRAINTS?]????? --指定在大容量導入操作期間,必須檢查全部對目標表或視圖的約束。若沒有?CHECK_CONSTRAINTS?選項,則全部?CHECK?和?FOREIGN?KEY?約束都將被忽略,而且在此操作之后表的約束將標記為不可信。 ??
- ???[?[?,?]?CODEPAGE?=?{? 'ACP' ?|? 'OEM' ?|? 'RAW' ?|? 'code_page' ?}?]?? --指定該數據文件里數據的代碼頁 ??
- ???[?[?,?]?DATAFILETYPE?=? ??
- ??????{? 'char' ?|? 'native' |? 'widechar' ?|? 'widenative' ?}?]?? --指定?BULK?INSERT?使用指定的數據文件類型值運行導入操作。 ??
- ???[?[?,?]?FIELDTERMINATOR?=? 'field_terminator' ?]?? --標識分隔內容的符號 ??
- ???[?[?,?]?FIRSTROW?=?first_row?]???? --指定要載入的第一行的行號。默認值是指定數據文件里的第一行 ??
- ???[?[?,?]?FIRE_TRIGGERS?]????? --是否啟動觸發器 ??
- ???[?[?,?]?FORMATFILE?=? 'format_file_path' ?]? ??
- ???[?[?,?]?KEEPIDENTITY?]??? --指定導入數據文件里的標識值用于標識列 ??
- ???[?[?,?]?KEEPNULLS?]???? --指定在大容量導入操作期間空列應保留一個空值,而不插入用于列的不論什么默認值 ??
- ???[?[?,?]?KILOBYTES_PER_BATCH?=?kilobytes_per_batch?]? ??
- ???[?[?,?]?LASTROW?=?last_row?]??? --指定要載入的最后一行的行號 ??
- ???[?[?,?]?MAXERRORS?=?max_errors?]??? --指定同意在數據中出現的最多語法錯誤數,超過該數量后將取消大容量導入操作。 ??
- ???[?[?,?]? ORDER ?(?{? column ?[? ASC ?|? DESC ?]?}?[?,...n?]?)?]?? --指定數據文件里的數據怎樣排序 ??
- ???[?[?,?]?ROWS_PER_BATCH?=?rows_per_batch?]? ??
- ???[?[?,?]?ROWTERMINATOR?=? 'row_terminator' ?]??? --標識分隔行的符號 ??
- ???[?[?,?]?TABLOCK?]????? --指定為大容量導入操作持續時間獲取一個表級鎖 ??
- ???[?[?,?]?ERRORFILE?=? 'file_name' ?]??? --指定用于收集格式有誤且不能轉換為?OLE?DB?行集的行的文件。 ??
- ????????)]???
以下寫個個簡單的應用樣例
- bulk? insert ?xsxt.dbo.tabletest? from ? 'c:/data.txt' ??
- ? with ( ??
- ???FIELDTERMINATOR= ',' , ??
- ???ROWTERMINATOR= '/n' ??
- )??
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
