Compartir a través de


Configuración de ejemplo de copia masiva (ADO.NET)

La clase SqlBulkCopy sólo se puede utilizar para escribir datos en tablas SQL Server. Los ejemplos de código que se muestran en este tema utilizan la base de datos de ejemplo de SQL Server 2005, AdventureWorks. Con el fin de evitar modificar las tablas existentes, los ejemplos de código escriben datos en tablas que primero deberá crear.

Las tablas BulkCopyDemoMatchingColumns y BulkCopyDemoDifferentColumns están basadas ambas en la tabla Production.Products de AdventureWorks. En los ejemplos de código que emplean estas tablas, los datos se agregan desde la tabla Production.Products a una de estas tablas de ejemplo. La tabla BulkCopyDemoDifferentColumns se utiliza cuando en el ejemplo se ilustra cómo asignar columnas desde los datos de origen a la tabla de destino; la tabla BulkCopyDemoMatchingColumns se utiliza en la mayoría de los demás ejemplos.

En algunos de los ejemplos de código se muestra cómo utilizar una clase SqlBulkCopy para escribir en varias tablas. En estos ejemplos, las tablas BulkCopyDemoOrderHeader y BulkCopyDemoOrderDetail se utilizan como tablas de destino. Estas tablas se basan en las tablas Sales.SalesOrderHeader y Sales.SalesOrderDetail de AdventureWorks.

NotaNota

El ejemplo de código SqlBulkCopy se proporciona para mostrar cuál debe ser la sintaxis cuando sólo se utiliza SqlBulkCopy.Si las tablas de origen y de destino están incluidas en la misma instancia de SQL Server, lo más rápido y sencillo es usar una instrucción INSERT … SELECT de Transact-SQL para copiar los datos.

Configuración de las tablas

Para crear las tablas necesarias para que los ejemplos de código de funcionen correctamente, debe ejecutar las siguientes instrucciones Transact-SQL en una base de datos SQL Server.

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]

Vea también

Otros recursos

Operaciones de copia masiva en SQL Server (ADO.NET)