批量复制示例设置 (ADO.NET)

SqlBulkCopy 类只能用于向 SQL Server 表中写入数据。 本主题中所示的代码示例使用 SQL Server 2005 示例数据库 AdventureWorks。 为避免改变现有表,代码示例将数据写入必须先创建的表。

BulkCopyDemoMatchingColumnsBulkCopyDemoDifferentColumns 表均基于 AdventureWorks Production.Products 表。 在使用这些表的代码示例中,数据从 Production.Products 表添加到其中一个示例表中。 如果示例说明如何将源数据中的列映射到目标表,请使用 BulkCopyDemoDifferentColumns 表;对于大多数其他示例,请使用 BulkCopyDemoMatchingColumns

一些代码示例演示如何使用一个 SqlBulkCopy 类写入多个表。 对于这些示例,BulkCopyDemoOrderHeaderBulkCopyDemoOrderDetail 表作为目标表使用。 这些表基于 AdventureWorks 中的 Sales.SalesOrderHeaderSales.SalesOrderDetail 表。

注意注意

提供 SqlBulkCopy 代码示例是为了演示仅使用 SqlBulkCopy 时的语法。如果源表和目标表位于同一个 SQL Server 实例中,则使用 Transact-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]

请参见

其他资源

SQL Server 中的批量复制操作 (ADO.NET)