SqlBulkCopy 類別只能用來將資料寫入到 SQL Server 資料表。 本主題中展示的程式碼範例使用 SQL Server 範例資料庫 AdventureWorks。 若要避免變更現有資料表的程式碼範例,請將資料寫入必須事先建立的資料表。
BulkCopyDemoMatchingColumns和 BulkCopyDemoDifferentColumns 表格都是基於該AdventureWorksProduction.Products表格。 在使用這些資料表的程式碼範例中,會將來自 Production.Products 資料表的資料新增至其中一個範例資料表。 當樣本說明如何將來源資料的欄位映射到目標資料表時,會 BulkCopyDemoDifferentColumns 使用此表格; BulkCopyDemoMatchingColumns 大多數其他樣本則使用此表格。
幾個程式碼範例示範如何使用一個 SqlBulkCopy 類別來寫入多個資料表。 對於這些樣本, BulkCopyDemoOrderHeader 和 BulkCopyDemoOrderDetail 表格作為目的表格。 這些表格是以 AdventureWorks 中的 Sales.SalesOrderHeader 和 Sales.SalesOrderDetail 表格為基礎。
注意
程式碼範例展示其語法。 如果來源和目的資料表在同一個SQL Server實例中,請使用 Transact-SQL(T-SQL)INSERT ... SELECT陳述式以加快複製速度。
資料表設定
若要建立程式碼範例正確執行所需的資料表,您必須在 SQL Server 資料庫中執行下列 Transact-SQL 陳述式。
USE AdventureWorks
IF EXISTS (SELECT * FROM dbo.sysobjects
WHERE id = object_id(N'[dbo].[BulkCopyDemoMatchingColumns]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[BulkCopyDemoMatchingColumns]
CREATE TABLE [dbo].[BulkCopyDemoMatchingColumns]([ProductID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[ProductNumber] [nvarchar](25) NOT NULL,
CONSTRAINT [PK_ProductID] PRIMARY KEY CLUSTERED
(
[ProductID] ASC
) ON [PRIMARY]) ON [PRIMARY]
IF EXISTS (SELECT * FROM dbo.sysobjects
WHERE id = object_id(N'[dbo].[BulkCopyDemoDifferentColumns]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[BulkCopyDemoDifferentColumns]
CREATE TABLE [dbo].[BulkCopyDemoDifferentColumns]([ProdID] [int] IDENTITY(1,1) NOT NULL,
[ProdNum] [nvarchar](25) NOT NULL,
[ProdName] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_ProdID] PRIMARY KEY CLUSTERED
(
[ProdID] ASC
) ON [PRIMARY]) ON [PRIMARY]
IF EXISTS (SELECT * FROM dbo.sysobjects
WHERE id = object_id(N'[dbo].[BulkCopyDemoOrderHeader]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[BulkCopyDemoOrderHeader]
CREATE TABLE [dbo].[BulkCopyDemoOrderHeader]([SalesOrderID] [int] IDENTITY(1,1) NOT NULL,
[OrderDate] [datetime] NOT NULL,
[AccountNumber] [nvarchar](15) NULL,
CONSTRAINT [PK_SalesOrderID] PRIMARY KEY CLUSTERED
(
[SalesOrderID] ASC
) ON [PRIMARY]) ON [PRIMARY]
IF EXISTS (SELECT * FROM dbo.sysobjects
WHERE id = object_id(N'[dbo].[BulkCopyDemoOrderDetail]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[BulkCopyDemoOrderDetail]
CREATE TABLE [dbo].[BulkCopyDemoOrderDetail]([SalesOrderID] [int] NOT NULL,
[SalesOrderDetailID] [int] NOT NULL,
[OrderQty] [smallint] NOT NULL,
[ProductID] [int] NOT NULL,
[UnitPrice] [money] NOT NULL,
CONSTRAINT [PK_LineNumber] PRIMARY KEY CLUSTERED
(
[SalesOrderID] ASC,
[SalesOrderDetailID] ASC
) ON [PRIMARY]) ON [PRIMARY]