可以将包含标识值的数据文件大容量导入到 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;GOSELECT * INTO HumanResources.myDepartment FROM HumanResources.Department WHERE 1=0;GOSELECT * 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;GODELETE HumanResources.myDepartment;GOBULK INSERT HumanResources.myDepartment FROM 'C:\myDepartment-n.Dat' WITH ( KEEPIDENTITY, FORMATFILE='C:\myDepartment-f-n-x.Xml' );GOSELECT * FROM HumanResources.myDepartment; C. 使用 OPENROWSET 并保留标识值 下面的示例使用 OPENROWSET 大容量行集提供程序将数据从 myDepartment-c.Dat 文件大容量导入到 AdventureWorks2008R2.HumanResources.myDepartment 表中。该语句使用 myDepartment-f-n-x.Xml 格式化文件,并包含 KEEPIDENTITY 提示来确保保留数据文件中的所有标识值。在 SQL Server Management Studio 查询编辑器中,执行:复制USE AdventureWorks2008R2;GODELETE HumanResources.myDepartment;GOINSERT 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
详细解决方案
sqlserver大容量导入数据时保存标识值
热度:40 发布时间:2016-05-05 15:03:25.0
相关解决方案
- [Microsoft][SQLServer 2000 Driver for JDBC]No ResultSet set was produced.多谢
- com.microsoft.sqlserver.jdbc.SQLServerException: 列名 n_id 无效。解决方案
- com.microsoft.sqlserver.jdbc.SQLServerException: 该联接已关闭
- Cannot load JDBC driver class 'com.microsoft.jdbc.sqlserver.SQLServerDriver'解决方法
- com.microsoft.sqlserver.jdbc.SQLServerException: 将截断字符串或二进制数据。该怎么解决
- com.microsoft.sqlserver.jdbc.SQLServerException: 没为参数号 2 设置值
- com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa' 登录失败。该用户与可托 SQL Server
- java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
- [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.解决思路
- java sqlserver jdbc有关问题
- asp.net mvc3.0+sqlserver 高并发日记系统解决方案,求思路
- asp.net +sqlserver 能不能 读取一次数据库,然后按条件输出,该如何解决
- sqlserver bulk insert 远道导入数据!
- sqlserver 2005 的問題,该如何处理
- sqlserver 数据库备份,该怎么处理
- 未能加载资料或程序集“Microsoft.SqlServer.Replication”或它的某一个依赖项。试图加载格式不正确的程序
- MS sqlserver 查询有关问题,
- 取出表A中第31到第40记录(SQLServer, 以自动增长的ID作为主键, 注意:ID可能不是连续的。解决思路
- Microsoft.SqlServer.Replication.dll 引发的IIS异常
- C# SQLServer 企业应用解决思路
- sqlserver like '%,3,%' 有关问题。
- sqlserver 建数据库时表示时间,金额和重量的字段用什么数据类型好,有人说全用nvarchar因为好操作,求解,该怎么解决
- sqlserver 表的ID有关问题
- 请教mysql 跟 sqlserver 相似吗
- sqlserver dri权限是指什么?解决办法
- sqlserver ntext存储长度的有关问题
- asp.net sqlserver 怎么用一段代码来实现查询功能
- 关于SQL过滤,仅过滤单引号是否可以防止注入(access,sqlserver),该如何处理
- 哪位兄弟推荐个易于整合到网站用户的bbs源码(asp.net2.0+sqlserver),该如何解决
- 大型 OA C#+SQLSERVER 源码,该怎么解决