如何在插入数据库时​​以编程方式覆盖Auto_Increment值

时间:2013-10-11 22:41:03

标签: c# asp.net-mvc-4 sql-server-2012 auto-increment datacontext

我刚开始将旧的Web应用程序转换为新的结构。

我在MS SQL Server 2012数据库中创建了一个新设计的供应商表,我正在将供应商数据从旧数据库传输到。

我使用新数据库作为数据上下文进行C#MVC应用程序设置。目前,应用程序从旧应用程序DB获取数据,检查它,在必要时重新格式化,并以所需格式将其插入新数据库。

然而,由于应用程序的用户习惯了旧数据库中的供应商ID,我不想更改ID,但是因为新供应商表中的id字段是自动增量,所以它不是从旧数据库中复制ID。它只是增加。

有人知道无论如何,可以在项目初始导入阶段的c#代码中以编程方式覆盖自动增量。一旦导入了旧系统的数据,我就想恢复自动增量。

3 个答案:

答案 0 :(得分:1)

您可以设置身份插入。但是,如果用户知道我发现的密钥,他们就会开始要求更改它们。我可能会将旧密钥视为用户标识符,并创建一个他们将看不到的新代理密钥。

答案 1 :(得分:1)

您可以在一堆插入期间暂时关闭服务器上的标识生成,然后再将其打开。尝试将此查询提交到服务器:

SET IDENTITY_INSERT dbo.sometable ON ;

INSERT INTO dbo.sometable (id,.......) VALUES (456,.......) ;
INSERT INTO dbo.sometable (id,.......) VALUES (276,.......) ;
INSERT INTO dbo.sometable (id,.......) VALUES (387,.......) ;

SET IDENTITY_INSERT dbo.sometable OFF ;

它只是禁用身份创建,然后执行插入(请注意列和值列表包含id),然后恢复默认行为。

答案 2 :(得分:0)

在Sql Server中,您可以将ID字段设置为非标识。这将使其不自动增量