小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

SQL Server數(shù)據(jù)的批量導(dǎo)入

 wwwijhyt圖書(shū)館 2014-05-09

如果你從事與數(shù)據(jù)庫(kù)相關(guān)的工作,有可能會(huì)涉及到將數(shù)據(jù)從外部數(shù)據(jù)文件插入倒SQL Server的操作。本文將為大家演示如何利用BULK INSERT命令來(lái)導(dǎo)入數(shù)據(jù),并講解怎樣通過(guò)改變?cè)撁畹囊恍┻x項(xiàng)以便更方便且更有效地插入數(shù)據(jù)。

  BULK INSERT

  在SQL Server中,BULK INSERT是用來(lái)將外部文件以一種特定的格式加載到數(shù)據(jù)庫(kù)表的T-SQL命令。該命令使開(kāi)發(fā)人員能夠直接將數(shù)據(jù)加載到數(shù)據(jù)庫(kù)表中,而不需要使用類(lèi)似于Integration Services這樣的外部程序。雖然BULK INSERT不允許包含任何復(fù)雜的邏輯或轉(zhuǎn)換,但能夠提供與格式化相關(guān)的選項(xiàng),并告訴我們導(dǎo)入是如何實(shí)現(xiàn)的。BULK INSERT有一個(gè)使用限制,就是只能將數(shù)據(jù)導(dǎo)入SQL Server。

  插入數(shù)據(jù)

  下面的例子能讓我們更好的理解如何使用BULK INSERT命令。首先,我們來(lái)創(chuàng)建一個(gè)名為Sales的表,我們將要把來(lái)自文本文件的數(shù)據(jù)插入到這個(gè)表中。

  CREATE TABLE [dbo].[Sales]

 

  (

  [SaleID] [int],

  [Product] [varchar](10) NULL,

  [SaleDate] [datetime] NULL,

  [SalePrice] [money] NULL

  )

 

  當(dāng)我們使用BULK INSERT命令來(lái)插入數(shù)據(jù)時(shí),不要啟動(dòng)目標(biāo)表中的觸發(fā)器,因?yàn)橛|發(fā)器會(huì)減緩數(shù)據(jù)導(dǎo)入的進(jìn)程。

  在下一個(gè)例子中,我們將在Sales表上創(chuàng)建觸發(fā)器,用來(lái)打印插入到表中的記錄的數(shù)量。

  CREATE TRIGGER tr_Sales

 

  ON Sales

  FOR INSERT

  AS

  BEGIN

  PRINT CAST(@@ROWCOUNT AS VARCHAR(5)) + ' rows Inserted.'

  END

 

  這里我們選擇文本文件作為源數(shù)據(jù)文件,文本文件中的值通過(guò)逗號(hào)分割開(kāi)。該文件包含1000條記錄,而且其字段和Sales表的字段直接關(guān)聯(lián)。由于該文本文件中的值是由逗號(hào)分割開(kāi)的,我們只需要指定FIELDTERMINATOR即可。注意,當(dāng)下面這條語(yǔ)句運(yùn)行時(shí),我們剛剛創(chuàng)建的觸發(fā)器并沒(méi)有啟動(dòng):

  BULK INSERT Sales FROM 'c:SalesText.txt' WITH (FIELDTERMINATOR = ',')

  當(dāng)我們要的數(shù)據(jù)量非常大時(shí),有時(shí)候就需要啟動(dòng)觸發(fā)器。下面的腳本使用了FIRE_TRIGGERS選項(xiàng)來(lái)指明在目標(biāo)表上的任何觸發(fā)器都應(yīng)當(dāng)啟動(dòng):

  BULK INSERT Sales FROM 'c:SalesText.txt' WITH (FIELDTERMINATOR = ',', FIRE_TRIGGERS)

  我們可以使用BATCHSIZE指令來(lái)設(shè)置在單個(gè)事務(wù)中可以插入到表中的記錄的數(shù)量。在前一個(gè)例子中,所有的1000條記錄都在同一個(gè)事務(wù)中被插入到目標(biāo)表里。下面的例子,我們將BATCHSIZE參數(shù)設(shè)置為2,也就是說(shuō)要對(duì)該表執(zhí)行500次獨(dú)立的插入事務(wù)。這也意味著啟動(dòng)500次觸發(fā)器,所以將有500咯打印指令輸出到屏幕上。

 BULK INSERT Sales FROM 'c:SalesText.txt' WITH (FIELDTERMINATOR = ',', FIRE_TRIGGERS, BATCHSIZE = 2)

  BULK INSERT不僅僅可以應(yīng)用于SQL Server 2005的本地映射驅(qū)動(dòng)器。下面的語(yǔ)句將告訴我們?nèi)绾螐拿麨镕ileServer的服務(wù)器的D盤(pán)中將SalesText文件的數(shù)據(jù)導(dǎo)入。

  BULK INSERT Sales FROM 'FileServerD$SalesText.txt' WITH (FIELDTERMINATOR = ',')

  有時(shí)候,我們?cè)趫?zhí)行導(dǎo)入操作以前,最好能先查看一下將要輸入的數(shù)據(jù)。下面的語(yǔ)句在使用BULK命令時(shí),使用了OPENROWSET函數(shù),以便從SalesText文本文件中讀取源數(shù)據(jù)。該語(yǔ)句同時(shí)還需要使用一個(gè)格式文件(此處沒(méi)有列出文件的具體內(nèi)容)來(lái)表明該文本文件中的數(shù)據(jù)格式。

  SELECT *

 

  FROM OPENROWSET(BULK 'c:SalesText.txt' ,

  FORMATFILE='C:SalesFormat.Xml'

  ) AS mytable;

  GO

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多