Példa a tömeges másolás beállítására

Az SqlBulkCopy osztály csak SQL Server-táblákba írhat adatokat. A jelen témakörben bemutatott kódminták az ADVENTUREWorks SQL Server-mintaadatbázist használják. A meglévő táblakódminták módosításának elkerülése érdekében írjon adatokat azokra a táblákra, amelyeket először létre kell hoznia.

A BulkCopyDemoMatchingColumns táblák a BulkCopyDemoDifferentColumnsAdventureWorks táblán alapulnak. Az ezeket a táblákat használó kódmintákban a rendszer adatokat ad hozzá a Production.Products táblából ezen mintatáblák egyikéhez. A BulkCopyDemoDifferentColumns rendszer akkor használja a táblázatot, ha a minta bemutatja, hogyan képezhet le oszlopokat a forrásadatokból a céltáblába; BulkCopyDemoMatchingColumns a legtöbb más mintához használatos.

Néhány kódminta bemutatja, hogyan lehet egy SqlBulkCopy osztályt több táblába írni. Ezeknél a mintáknál a BulkCopyDemoOrderHeader és BulkCopyDemoOrderDetail táblák lesznek a céltáblák. Ezek a táblák az AdventureWorks Sales.SalesOrderHeader és Sales.SalesOrderDetail tábláin alapulnak.

Megjegyzés

A SqlBulkCopy kódminták a csak használt SqlBulkCopy szintaxis szemléltetésére szolgálnak. Ha a forrás- és céltáblák ugyanabban az SQL Server-példányban találhatók, egyszerűbb és gyorsabb a Transact-SQL INSERT … SELECT utasítás használata az adatok másolásához.

Tábla beállítása

A kódminták megfelelő futtatásához szükséges táblák létrehozásához az alábbi Transact-SQL-utasításokat kell futtatnia egy SQL Server-adatbázisban.

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]

Lásd még