`

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

阅读更多
可以将包含标识值的数据文件大容量导入到 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
DELETE HumanResources.myDepartment;
GO

INSERT INTO HumanResources.myDepartment
   with (KEEPIDENTITY)
   (DepartmentID, Name, GroupName, ModifiedDate)
   SELECT *
      FROM  OPENROWSET(BULK 'C:\myDepartment-n.Dat',
      FORMATFILE='C:\myDepartment-f-n-x.Xml') as t1;
GO

分享到:
评论

相关推荐

    SQL SERVER BULK INSERT用法

    BULK INSERT 是 SQL Server 中的一种 BulkCopy 功能,允许用户快速将大量数据从文本文件或其他数据源导入到数据库表或视图中。下面是 BULK INSERT 的详细用法和参数解释: 基本语法 BULK INSERT [ [ 'database_...

    Microsoft SQL Server环境中图像数据的存取方法研究.pdf

    文章首先介绍了研究的背景和必要性,指出了在C/S(客户端/服务器)模式和B/S(浏览器/服务器)模式的应用系统开发中,处理大容量图像数据是常见的需求。文章以内蒙古工业大学管理学院的李弘和徐德生的研究为例,通过存储...

    SQL SERVER 2000开发与管理应用实例

    涉及安装和配置SQL Server、日期处理、字符处理、排序规则、编号处理、数据统计与汇总、分页处理、树形数据处理、数据导入与导出、作业、数据备份与还原、用户定义数据类型、数据库安全、系统表应用实例、SQL Server...

    sql备份日志的影响

    大容量日志恢复模式针对大容量数据导入操作进行了优化,旨在提高这类操作的性能。与完整恢复模式类似,大容量日志恢复模式在事务日志备份后也会截断日志,但是它不支持恢复到任意时间点,只能恢复到最近一次事务日志...

    经典SQL语句大全

    评价: 这种操作牵连大量的数据的移动,这种做法不适合大容量但数据操作 3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多...

    EnSQL2000.rar

    SQL Server 2000支持多种备份类型,如完整备份、差异备份、日志备份等,提供灵活的恢复模式,如简单恢复模式、完整恢复模式和大容量日志恢复模式,确保数据的可靠性和业务连续性。 五、开发与集成 SQL Server 2000...

    MSSQL数据库管理

    大容量模式适用于大量数据导入,不记录事务日志;而完整模式则提供最全面的备份和恢复选项,允许恢复到特定时间点。 数据库日志文件突然增大且无法收缩,可能是因为长时间运行的事务导致,可以查看master.dbo....

    数据库操作语句大全(sql)

    评价: 这种操作牵连大量的数据的移动,这种做法不适合大容量但数据操作 3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多...

    迷你SQL2000

    +增加了大容量数据的存取支持,增加bcp命令,允许在SQL中使用bcp命令进行大数据的导入导出; +增加BULK INSERT、OPENROWSET这些数据批处理SQL命令的支持。 示例:--OPENROWSET SELECT CustomerID, CompanyName ...

    超实用sql语句

    评价: 这种操作牵连大量的数据的移动,这种做法不适合大容量但数据操作 3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多...

    ArcGIS Server_2007

    - **空间数据管理**:包括地理数据库的管理、数据导入导出等功能。 - **可视化 (制图)**:提供地图制作工具,支持各种地图样式和符号的定制。 - **空间分析**:具备丰富的空间分析功能,如缓冲区分析、叠加分析等。 ...

    C#.net_经典编程例子400个

    61 2.4 RichTextBox控件应用 63 实例056 利用RichTextBox控件实现文档管理功能 63 实例057 利用RichTextBox控件实现文字定位与标识 65 实例058 用RichTextBox控件显示图文数据 67 2.5 ...

    2021-2022计算机二级等级考试试题及答案No.1589.docx

    5. ASP.NET 数据访问:在 ASP.NET 应用程序中,访问 SQL Server 数据库时需要导入 `System.Data.SqlClient` 命名空间,这是用于与 SQL Server 数据库交互的类库。 6. IE 浏览器:IE 不是 Windows 平台上唯一的网页...

    Oracle经典教程(推荐)word版

    - 可以创建一个抽象工厂类,根据不同的数据库类型(如Oracle、SQL Server等)实例化相应的数据访问组件。 #### 第七章:数据库导入导出 **7.1 Oracle导入导出** - **概述:** - Oracle提供了几种工具用于数据的...

    2021-2022计算机二级等级考试试题及答案No.19762.docx

    9. 在ASP.NET应用程序中访问SQL Server数据库需要导入System.Data.SqlClient命名空间,该命名空间包含了与SQL Server交互所需的对象和类。 10. 创建数据库的第二种方法是使用“数据库向导”。这提供了一种简化的...

    名片软件需求分析

    - **SQL Server数据库**:选用成熟稳定的SQL Server作为数据存储方案,保障数据安全与完整性。 **2. 运行环境配置** - **操作系统支持**:兼容Windows XP和Windows 7等主流操作系统。 - **开发工具**:基于VC环境...

Global site tag (gtag.js) - Google Analytics