Hopes

          Start Here..

           

          BULK INSERT用法詳解,文本導(dǎo)入SQL,字段數(shù)量不等實(shí)例.

          BULK INSERT用法詳解,文本導(dǎo)入SQL,字段數(shù)量不等實(shí)例.

          分類: 導(dǎo)入導(dǎo)出專題 精華答題收集 批量處理相關(guān)
          2009-09-13 17:01 6188人閱讀 評(píng)論(2) 收藏 舉報(bào)

          Bulk Insert命令詳解

          BULK INSERT

          以用戶指定的格式復(fù)制一個(gè)數(shù)據(jù)文件至數(shù)據(jù)庫(kù)表或視圖中。

          語(yǔ)法

          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 ] ]

          )

          ]

          參數(shù)

          'database_name'

          是包含指定表或視圖的數(shù)據(jù)庫(kù)的名稱。如果未指定,則系統(tǒng)默認(rèn)為當(dāng)前數(shù)據(jù)庫(kù)。

          'owner'

          是表或視圖所有者的名稱。當(dāng)執(zhí)行大容量復(fù)制操作的用戶擁有指定的表或視圖時(shí),owner 是可選項(xiàng)。如果沒(méi)有指定 owner 并且執(zhí)行大容量復(fù)制操作的用戶不擁有指定的表或視圖,則 Microsoft® SQL Server™ 將返回錯(cuò)誤信息并取消大容量復(fù)制操作。

          'table_name'

          是大容量復(fù)制數(shù)據(jù)于其中的表或視圖的名稱。只能使用那些所有的列引用相同基表所在的視圖。有關(guān)向視圖中復(fù)制數(shù)據(jù)的限制的更多信息,請(qǐng)參見(jiàn) INSERT。

          'data_file'

          是數(shù)據(jù)文件的完整路徑,該數(shù)據(jù)文件包含要復(fù)制到指定表或視圖的數(shù)據(jù)。BULK INSERT 從磁盤復(fù)制數(shù)據(jù)(包括網(wǎng)絡(luò)、軟盤、硬盤等)。

          data_file 必須從運(yùn)行 SQL Server 的服務(wù)器指定有效路徑。如果 data_file 是遠(yuǎn)程文件,則請(qǐng)指定通用命名規(guī)則 (UNC) 名稱。

          BATCHSIZE [ = batch_size ]

          指定批處理中的行數(shù)。每個(gè)批處理作為一個(gè)事務(wù)復(fù)制至服務(wù)器。SQL Server提交或回滾(在失敗時(shí))每個(gè)批處理的事務(wù)。默認(rèn)情況下,指定數(shù)據(jù)文件中的所有數(shù)據(jù)是一個(gè)批處理。

          CHECK_CONSTRAINTS

          指定在大容量復(fù)制操作中檢查 table_name 的任何約束。默認(rèn)情況下,將會(huì)忽略約束。

          CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ]

          指定該數(shù)據(jù)文件中數(shù)據(jù)的代碼頁(yè)。僅當(dāng)數(shù)據(jù)含有字符值大于 127 或小于 32 的 char、varchar 或 text 列時(shí),CODEPAGE 才是適用的。

          CODEPAGE 值 描述

          ACP char、varchar 或 text 數(shù)據(jù)類型的列從 ANSI/Microsoft Windows® 代碼頁(yè) ISO 1252 轉(zhuǎn)換為 SQL Server 代碼頁(yè)。

          OEM(默認(rèn)值) char、varchar 或 text 數(shù)據(jù)類型的列被從系統(tǒng) OEM 代碼頁(yè)轉(zhuǎn)換為 SQL Server 代碼頁(yè)。

          RAW 并不進(jìn)行從一個(gè)代碼頁(yè)到另一個(gè)代碼頁(yè)的轉(zhuǎn)換;這是最快的選項(xiàng)。

          code_page 特定的代碼頁(yè)號(hào)碼,例如 850。

          DATAFILETYPE [ = {'char' | 'native' | 'widechar' | 'widenative' } ]

          指定 BULK INSERT 使用指定的默認(rèn)值執(zhí)行復(fù)制操作。

          DATAFILETYPE 值 描述

          char(默認(rèn)值) 從含有字符數(shù)據(jù)的數(shù)據(jù)文件執(zhí)行大容量復(fù)制操作。

          native 使用 native(數(shù)據(jù)庫(kù))數(shù)據(jù)類型執(zhí)行大容量復(fù)制操作。要裝載的數(shù)據(jù)文件由大容量復(fù)制數(shù)據(jù)創(chuàng)建,該復(fù)制是用 bcp 實(shí)用工具從 SQL Server 進(jìn)行的。

          widechar 從含有 Unicode 字符的數(shù)據(jù)文件中執(zhí)行大容量復(fù)制操作。

          widenative 執(zhí)行與 native 相同的大容量復(fù)制操作,不同之處是 char、varchar 和 text 列在數(shù)據(jù)文件中存儲(chǔ)為 Unicode。要裝載的數(shù)據(jù)文件由大容量復(fù)制數(shù)據(jù)創(chuàng)建,該復(fù)制是用 bcp 實(shí)用工具從 SQL Server 進(jìn)行的。該選項(xiàng)是對(duì) widechar 選項(xiàng)的一個(gè)更高性能的替代,并且它用于使用數(shù)據(jù)文件從一個(gè)運(yùn)行 SQL Server 的計(jì)算機(jī)向另一個(gè)計(jì)算機(jī)傳送數(shù)據(jù)。當(dāng)傳送含有 ANSI 擴(kuò)展字符的數(shù)據(jù)時(shí),使用該選項(xiàng)以便利用 native 模式的性能。

          FIELDTERMINATOR [ = 'field_terminator' ]

          指定用于 char 和 widechar 數(shù)據(jù)文件的字段終止符。默認(rèn)的字段終止符是 /t(制表符)。

          FIRSTROW [ = first_row ]

          指定要復(fù)制的第一行的行號(hào)。默認(rèn)值是 1,表示在指定數(shù)據(jù)文件的第一行。

          FIRE_TRIGGERS

          指定目的表中定義的任何插入觸發(fā)器將在大容量復(fù)制操作過(guò)程中執(zhí)行。如果沒(méi)有指定 FIRE_TRIGGERS,將不執(zhí)行任何插入觸發(fā)器。

          FORMATFILE [ = 'format_file_path' ]

          指定一個(gè)格式文件的完整路徑。格式文件描述了含有存儲(chǔ)響應(yīng)的數(shù)據(jù)文件,這些存儲(chǔ)響應(yīng)是使用 bcp 實(shí)用工具在相同的表或視圖中創(chuàng)建的。格式文件應(yīng)該用于以下情況:

          數(shù)據(jù)文件含有比表或視圖更多或更少的列。

          列使用不同的順序。

          列分割符發(fā)生變化。

          數(shù)據(jù)格式有其它的改變。通常,格式文件通過(guò) bcp 實(shí)用工具創(chuàng)建并且根據(jù)需要用文本編輯器修改。有關(guān)更多信息,請(qǐng)參見(jiàn) bcp 實(shí)用工具。

          KEEPIDENTITY

          指定標(biāo)識(shí)列的值存在于導(dǎo)入文件中。如果沒(méi)有指定 KEEPIDENTITY,在導(dǎo)入的數(shù)據(jù)文件中此列的標(biāo)識(shí)值將被忽略,并且 SQL Server 將根據(jù)表創(chuàng)建時(shí)指定的種子值和增量值自動(dòng)賦給一個(gè)唯一的值。假如數(shù)據(jù)文件不含該表或視圖中的標(biāo)識(shí)列,使用一個(gè)格式文件來(lái)指定在導(dǎo)入數(shù)據(jù)時(shí),表或視圖中的標(biāo)識(shí)列應(yīng)被忽略;SQL Server 自動(dòng)為此列賦予唯一的值。有關(guān)詳細(xì)信息,請(qǐng)參見(jiàn) DBCC CHECKIDENT。

          KEEPNULLS

          指定在大容量復(fù)制操作中空列應(yīng)保留一個(gè)空值,而不是對(duì)插入的列賦予默認(rèn)值。

          KILOBYTES_PER_BATCH [ = kilobytes_per_batch ]

          指定每個(gè)批處理中數(shù)據(jù)的近似千字節(jié)數(shù)(KB)。默認(rèn)情況下,KILOBYTES_PER_BATCH 未知。

          LASTROW [ = last_row ]

          指定要復(fù)制的最后一行的行號(hào)。默認(rèn)值是 0,表示指定數(shù)據(jù)文件中的最后一行。

          MAXERRORS [ = max_errors ]

          指定在大容量復(fù)制操作取消之前可能產(chǎn)生的錯(cuò)誤的最大數(shù)目。不能被大容量復(fù)制操作導(dǎo)入的每一行將被忽略并且被計(jì)為一次錯(cuò)誤。如果沒(méi)有指定 max_errors,默認(rèn)值為 0。

          ORDER ( { column [ ASC | DESC ] } [ ,...n ] )

          指定數(shù)據(jù)文件中的數(shù)據(jù)如何排序。如果裝載的數(shù)據(jù)根據(jù)表中的聚集索引進(jìn)行排序,則可以提高大容量復(fù)制操作的性能。如果數(shù)據(jù)文件基于不同的順序排序,或表中沒(méi)有聚集索引,ORDER 子句將被忽略。給出的列名必須是目的表中有效的列。默認(rèn)情況下,大容量插入操作假設(shè)數(shù)據(jù)文件未排序。

          n

          是表示可以指定多列的占位符。

          ROWS_PER_BATCH [ = rows_per_batch ]

          指定每一批處理數(shù)據(jù)的行數(shù)(即 rows_per_bacth)。當(dāng)沒(méi)有指定 BATCHSIZE 時(shí)使用,導(dǎo)致整個(gè)數(shù)據(jù)文件作為單個(gè)事務(wù)發(fā)送給服務(wù)器。服務(wù)器根據(jù) rows_per_batch 優(yōu)化大容量裝載。默認(rèn)情況下,ROWS_PER_BATCH 未知。

          ROWTERMINATOR [ = 'row_terminator' ]

          指定對(duì)于 char 和 widechar 數(shù)據(jù)文件要使用的行終止符。默認(rèn)值是 /n(換行符)。

          TABLOCK

          指定對(duì)于大容量復(fù)制操作期間獲取一個(gè)表級(jí)鎖。如果表沒(méi)有索引并且指定了 TABLOCK,則該表可以同時(shí)由多個(gè)客戶端裝載。默認(rèn)情況下,鎖定行為是由表選項(xiàng) table lock on bulk load 決定的。只在大容量復(fù)制操作期間控制鎖會(huì)減少表上的鎖爭(zhēng)奪,極大地提高性能。

          注釋

          BULK INSERT 語(yǔ)句能在用戶定義事務(wù)中執(zhí)行。對(duì)于一個(gè)用 BULK INSERT 語(yǔ)句和 BATCHSIZE 子句將數(shù)據(jù)裝載到使用多個(gè)批處理的表或視圖中的用戶定義事務(wù)來(lái)說(shuō),回滾它將回滾所有發(fā)送給 SQL Server 的批處理。

          權(quán)限

          只有 sysadmin 和 bulkadmin 固定服務(wù)器角色成員才能執(zhí)行 BULK INSERT。

          示例

          本例從指定的數(shù)據(jù)文件中導(dǎo)入訂單詳細(xì)信息,該文件使用豎杠 (|) 字符作為字段終止符,使用 |/n 作為行終止符。

          BULK INSERT Northwind.dbo.[Order Details]

          FROM 'f:/orders/lineitem.tbl'

          WITH

          (

          FIELDTERMINATOR = '|',

          ROWTERMINATOR = '|/n'

          )

          本例指定 FIRE_TRIGGERS 參數(shù)。

          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指令來(lái)設(shè)置在單個(gè)事務(wù)中可以插入到表中的記錄的數(shù)量

          [ [ , ] CHECK_CONSTRAINTS ] --指定在大容量導(dǎo)入操作期間,必須檢查所有對(duì)目標(biāo)表或視圖的約束。若沒(méi)有 CHECK_CONSTRAINTS 選項(xiàng),則所有 CHECK 和 FOREIGN KEY 約束都將被忽略,并且在此操作之后表的約束將標(biāo)記為不可信。

          [ [ , ] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ] --指定該數(shù)據(jù)文件中數(shù)據(jù)的代碼頁(yè)

          [ [ , ] DATAFILETYPE =

          { 'char' | 'native'| 'widechar' | 'widenative' } ] --指定 BULK INSERT 使用指定的數(shù)據(jù)文件類型值執(zhí)行導(dǎo)入操作。

          [ [ , ] FIELDTERMINATOR = 'field_terminator' ] --標(biāo)識(shí)分隔內(nèi)容的符號(hào)

          [ [ , ] FIRSTROW = first_row ] --指定要加載的第一行的行號(hào)。默認(rèn)值是指定數(shù)據(jù)文件中的第一行

          [ [ , ] FIRE_TRIGGERS ] --是否啟動(dòng)觸發(fā)器

          [ [ , ] FORMATFILE = 'format_file_path' ]

          [ [ , ] KEEPIDENTITY ] --指定導(dǎo)入數(shù)據(jù)文件中的標(biāo)識(shí)值用于標(biāo)識(shí)列

          [ [ , ] KEEPNULLS ] --指定在大容量導(dǎo)入操作期間空列應(yīng)保留一個(gè)空值,而不插入用于列的任何默認(rèn)值

          [ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ]

          [ [ , ] LASTROW = last_row ] --指定要加載的最后一行的行號(hào)

          [ [ , ] MAXERRORS = max_errors ] --指定允許在數(shù)據(jù)中出現(xiàn)的最多語(yǔ)法錯(cuò)誤數(shù),超過(guò)該數(shù)量后將取消大容量導(dǎo)入操作。

          [ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ] --指定數(shù)據(jù)文件中的數(shù)據(jù)如何排序

          [ [ , ] ROWS_PER_BATCH = rows_per_batch ]

          [ [ , ] ROWTERMINATOR = 'row_terminator' ] --標(biāo)識(shí)分隔行的符號(hào)

          [ [ , ] TABLOCK ] --指定為大容量導(dǎo)入操作持續(xù)時(shí)間獲取一個(gè)表級(jí)鎖

          [ [ , ] ERRORFILE = 'file_name' ] --指定用于收集格式有誤且不能轉(zhuǎn)換為 OLE DB 行集的行的文件。

          )]

          下面寫個(gè)個(gè)簡(jiǎn)單的應(yīng)用例子

          bulk insert xsxt.dbo.tabletest from 'c:/data.txt'

          with(

          FIELDTERMINATOR=',',

          ROWTERMINATOR='/n'

          )

          posted on 2013-01-17 10:34 ** 閱讀(621) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          你好!

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊(cè)

          收藏夾

          C#學(xué)習(xí)

          友情鏈接

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 贵定县| 南充市| 上犹县| 德昌县| 鲁山县| 遵义县| 中阳县| 武宁县| 平阴县| 含山县| 上虞市| 金门县| 繁昌县| 土默特右旗| 璧山县| 蕉岭县| 衢州市| 高碑店市| 山丹县| 曲麻莱县| 渝中区| 依安县| 日土县| 徐汇区| 望谟县| 辽阳市| 石渠县| 武乡县| 太康县| 天祝| 诸城市| 民乐县| 嘉义市| 浦东新区| 大悟县| 安丘市| 徐汇区| 巴彦淖尔市| 田阳县| 茌平县| 永新县|