sqlserver大容量导入数据时保留标识值 (一)

2014-11-24 08:43:49 ? 作者: ? 浏览: 2

可以将包含标识值的数据文件大容量导入到MicrosoftSQL Server 实例中。默认情况下,将忽略导入的数据文件中标识列的值,SQL Server 自动分配唯一值。这些唯一值基于在表创建期间指定的种子和增量值。

如果该数据文件表中的标识符列不包含值,则使用格式化文件来指定导入数据时应跳过表中的标识符列。SQL Server 自动为此列分配唯一值。

若要防止SQL Server 在将数据行大容量导入到表中时分配标识值,请使用相应的保留标识命令限定符。在您指定保留标识限定符后,SQL Server 将在该数据文件中使用标识值。这些限定符如下:

命令

保留标识限定符

限定符类型

bcp

-E

开关

BULK INSERT

KEEPIDENTITY

参数

INSERT ...SELECT * FROM OPENROWSET(BULK...)

KEEPIDENTITY

表提示

有关详细信息,请参阅bcp 实用工具、BULK INSERT (Transact-SQL)、OPENROWSET (Transact-SQL)、INSERT (Transact-SQL)、SELECT (Transact-SQL) 和表提示(Transact-SQL)。

示例

--------------------------------------------------------------------------------

本主题中的示例使用INSERT ... SELECT * FROM OPENROWSET(BULK...)且保持默认值不变来大容量导入数据。

示例表

大容量导入示例需要在dbo 架构下的AdventureWorks2008R2 示例数据库中创建一个名为myTestKeepNulls 的表。若要创建此表,请在SQL Server Management Studio 查询编辑器中,执行以下语句:

复制

USE AdventureWorks2008R2;

GO

SELECT * INTO HumanResources.myDepartment

FROM HumanResources.Department

WHERE 1=0;

GO

SELECT * FROM HumanResources.myDepartment;

作为myDepartment 基础的Department 表的IDENTITY_INSERT 设置为OFF。因此,必须指定KEEPIDENTITY 或-E,才能将数据导入到标识列中。

示例数据文件

大容量导入示例中使用的数据文件包含从本机格式的HumanResources.Department 表中大容量导出的数据。若要创建数据文件,请在Microsoft Windows 命令提示符下输入以下内容:

复制

bcp AdventureWorks2008R2.HumanResources.Department out myDepartment-n.Dat -n -T

示例格式化文件

此大容量导入示例使用XML 格式化文件myDepartment-f-x-n.Xml,该文件使用本机数据格式。此示例使用bcp 进行创建,以从AdventureWorks2008R2 数据库的HumanResources.Department 表生成此格式化文件。在Windows 命令提示符下,输入以下内容:

复制

bcp AdventureWorks2008R2.HumanResources.Department format nul -n -x -f myDepartment-f-n-x.Xml -T

有关创建格式化文件的详细信息,请参阅创建格式化文件。

A. 使用bcp 并保留标识值

下面的示例说明如何在使用bcp 大容量导入数据时保留标识值。bcp 命令使用格式化文件myDepartment-f-n-x.Xml,并包含下列开关:

限定符

说明

-E

指定标识列使用数据文件中的标识值。

-T

指定bcp 实用工具使用可信连接来连接到SQL Server。

在Windows 命令提示符下输入。

复制

bcp AdventureWorks2008R2.HumanResources.myDepartment in C:\myDepartment-n.Dat -f C:\myDepartment-f-n-x.Xml -E -T

B. 使用BULK INSERT 并保留标识值

下面的示例使用BULK INSERT 将数据从myDepartment-c.Dat 文件大容量导入到AdventureWorks2008R2.HumanResources.myDepartment 表中。该语句使用myDepartment-f-n-x.Xml 格式化文件,并包含KEEPIDENTITY 选项来确保保留数据文件中的所有标识值。

在SQL Server Management Studio 查询编辑器中,执行:

复制

USE AdventureWorks2008R2;

GO

DELETE HumanResources.myDepartment;

GO

BULK INSERT HumanResources.myDepartment

FROM 'C:\myDepartment-n.Dat'

WITH (

KEEPIDENTITY,

FORMATFILE='C:\myDepartment-f-n-x.Xml'

);

GO

SELECT * FROM HumanResources.myDepartment;

C. 使用OPENROWSET 并保留标识值

下面的示例使用OPENROWSET 大容量行集提供程序将数据从myDepartment-c.Dat 文件大容量导入到AdventureWorks2008R2.HumanResources.myDepartment 表中。该语句使用myDepartment-f-n-x.Xml 格式化文件,并包含KEEPIDENTITY 提示来确保保留数据文件中的所有标识值。

在SQL Server Management Studio 查询编辑器中,执行:

复制

USE AdventureWorks2008R2;

GO

DELE

-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: