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 ],
- )
- 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 的服務器指定有效路徑。若是 data_file 是遠程文件,則請指定通用命名規則 (UNC) 名稱。
BATCHSIZE [ = batch_size ]
指定批處理中的行數。每一個批處理做爲一個事務複製至服務器。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 時使用,致使整個數據文件做爲單個事務發送給服務器。服務器根據 rows_per_batch 優化大容量裝載。默認狀況下,ROWS_PER_BATCH 未知。
ROWTERMINATOR [ = 'row_terminator' ]
指定對於 char 和 widechar 數據文件要使用的行終止符。默認值是 /n(換行符)。
TABLOCK
指 定對於大容量複製操做期間獲取一個表級鎖。若是表沒有索引而且指定了 TABLOCK,則該表能夠同時由多個客戶端裝載。默認狀況下,鎖定行爲是由表選項 table lock on bulk load 決定的。只在大容量複製操做期間控制鎖會減小表上的鎖爭奪,極大地提升性能。註釋BULK INSERT 語句能在用戶定義事務中執行。對於一個用 BULK INSERT 語句和 BATCHSIZE 子句將數據裝載到使用多個批處理的表或視圖中的用戶定義事務來講,回滾它將回滾全部發送給 SQL Server 的批處理。權限只有 sysadmin 和 bulkadmin 固定服務器角色成員才能執行 BULK INSERT。
示例本例從指定的數據文件中導入訂單詳細信息,該文件使用豎槓 (|) 字符做爲字段終止符,使用 |/n 做爲行終止符。 數據庫
- BULK INSERT Northwind.dbo.[Order Details] FROM 'f:/orders/lineitem.tbl'
- WITH (
- FIELDTERMINATOR = '|',
- ROWTERMINATOR = '|/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 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'
- )