如果你從事與數據庫相關的工作,有可能會涉及到將數據從外部數據文件插入倒SQL Server的操作。本文將為大家演示如何利用BULK INSERT命令來導入數據,并講解怎樣通過改變該命令的一些選項以便更方便且更有效地插入數據。


  如果你從事與數據庫相關的工作,有可能會涉及到將數據從外部數據文件插入倒SQL Server的操作。本文將為大家演示如何利用BULK INSERT命令來導入數據,并講解怎樣通過改變該命令的一些選項以便更方便且更有效地插入數據。

  BULK INSERT

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

  插入數據

  下面的例子能讓我們更好的理解如何使用BULK INSERT命令。首先,我們來創建一個名為Sales的表,我們將要把來自文本文件的數據插入到這個表中。

  CREATE TABLE [dbo].[Sales]
  (
  [SaleID] [int],
  [Product] [varchar](10) NULL,
  [SaleDate] [datetime] NULL,
  [SalePrice] [money] NULL
  )

  當我們使用BULK INSERT命令來插入數據時,不要啟動目標表中的觸發器,因為觸發器會減緩數據導入的進程。

  在下一個例子中,我們將在Sales表上創建觸發器,用來打印插入到表中的記錄的數量。

  CREATE TRIGGER tr_Sales
  ON Sales
  FOR INSERT
  AS
  BEGIN
  PRINT CAST(@@ROWCOUNT AS VARCHAR(5)) + ' rows Inserted.'
  END

  這里我們選擇文本文件作為源數據文件,文本文件中的值通過逗號分割開。該文件包含1000條記錄,而且其字段和Sales表的字段直接關聯。由于該文本文件中的值是由逗號分割開的,我們只需要指定FIELDTERMINATOR即可。注意,當下面這條語句運行時,我們剛剛創建的觸發器并沒有啟動:

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

  當我們要的數據量非常大時,有時候就需要啟動觸發器。下面的腳本使用了FIRE_TRIGGERS選項來指明在目標表上的任何觸發器都應當啟動:

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

  我們可以使用BATCHSIZE指令來設置在單個事務中可以插入到表中的記錄的數量。在前一個例子中,所有的1000條記錄都在同一個事務中被插入到目標表里。下面的例子,我們將BATCHSIZE參數設置為2,也就是說要對該表執行500次獨立的插入事務。這也意味著啟動500次觸發器,所以將有500咯打印指令輸出到屏幕上。

  如果你從事與數據庫相關的工作,有可能會涉及到將數據從外部數據文件插入倒SQL Server的操作。本文將為大家演示如何利用BULK INSERT命令來導入數據,并講解怎樣通過改變該命令的一些選項以便更方便且更有效地插入數據。

 

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

  BULK INSERT不僅僅可以應用于SQL Server 2005的本地映射驅動器。下面的語句將告訴我們如何從名為FileServer的服務器的D盤中將SalesText文件的數據導入。

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

  有時候,我們在執行導入操作以前,最好能先查看一下將要輸入的數據。下面的語句在使用BULK命令時,使用了OPENROWSET函數,以便從SalesText文本文件中讀取源數據。該語句同時還需要使用一個格式文件(此處沒有列出文件的具體內容)來表明該文本文件中的數據格式。

  SELECT *
  FROM OPENROWSET(BULK 'c:SalesText.txt' ,
  FORMATFILE='C:SalesFormat.Xml'
  ) AS mytable;
  GO