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

本文关键字:Auto 覆盖 Increment 方式 编程 数据库 插入 | 更新日期: 2023-09-27 18:35:13

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

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

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

但是,由于

应用程序的用户已经习惯了旧数据库中的供应商 ID,我不想更改 ID,但是由于新供应商表中的 id 字段是自动递增的,因此它不会从旧数据库中复制 ID。它只是简单地递增。

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

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

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

您可以在插入

期间暂时关闭服务器上的身份生成,然后再次打开它。尝试将此查询提交到服务器:

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),然后恢复默认行为。

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