【问题标题】:How to add an ID that has just been deleted in a database table如何在数据库表中添加刚刚删除的ID
【发布时间】:2014-03-19 07:21:48
【问题描述】:

虽然这似乎是一个非常幼稚的问题,但我想知道如何添加具有我刚刚删除的相同 ID 的行。

让我更清楚一点:假设我有一个名为 Employee 的表。架构如下:

CREATE TABLE dbo.Employee 
(EmployeeID int PRIMARY KEY,
 EmployeeName varchar(255) not null,
 Designation varchar(255),
 Salary int);

假设我从我的应用程序中添加了具有以下值的行:

EmployeeID -> 12
EmployeeName -> 'Lewis Montford'
Designation -> 'Accounts Officer'
Salary -> 8000

现在我刚刚从我的应用程序中对此记录执行了“删除”操作。我想添加一条新记录,当然是从我的应用程序中添加,但使用相同的 ID。像这样的:

EmployeeID -> 12
EmployeeName -> 'Amanda Gresham'
Designation -> 'Senior Project Manager'
Salary -> 15000

我无法做到这一点,因为每当我尝试添加新条目时,'EmployeeID' 会自动设置为 13,而不是 12。

我想知道为什么我不能添加一个将 'EmployeeID' 设置为 12 的新条目,以及我可以通过哪些方式实现这一点。

我的数据库服务器是 SQL Server 2012,我想提一提的重要一点是“EmployeeID”是一个“Identity”,“Identity Increment”设置为 1,“Identity Seed”设置为 1,它是该表的主键,它是在我的应用程序中自动生成的。

我用来插入数据的应用程序是用 C# 编写的。

【问题讨论】:

标签: c# sql sql-server-2012


【解决方案1】:

您为什么要这样做?我看不出有什么理由...
至于您的问题,您需要将IDENTITY_INSERT 设置为ON 才能明确指定ID。

SET IDENTITY_INSERT dbo.Employee ON

INSERT INTO dbo.Employee (EmployeeID , EmployeeName ,Designation ,Salary  )
VALUES (12, 'Amanda Gresham','Senior Project Manager',15000)

SET IDENTITY_INSERT dbo.Employee OFF

这是一个sqlfiddle 展示它的实际应用

【讨论】:

  • 我尝试了您的查询,但一直收到此错误:“只有在使用列列表且 IDENTITY_INSERT 为 ON 时,才能为表 'Employee' 中的标识列指定显式值。”跨度>
  • @CrescentMoon - 你确定你已经完全按照所示尝试了他们的查询吗?许多人错过了该错误消息中的and,并且只执行其中一项或另一项要求,而不是两者兼而有之。
  • @Damien_The_Unbeliever 是的,我已经完全按照所示尝试了查询。它与“列列表”有关吗? “列列表”的错误消息究竟是什么意思?
  • (EmployeeID , EmployeeName ,Designation ,Salary )INSERT 语句中的关键字VALUES 之前是列列表。正如你所看到的,我在这个答案中添加了一个 sqlfiddle 链接,表明它可以正常工作。
  • @Damien_The_Unbeliever 是的,我忘记了 INSERT 语句中关键字 VALUES 之前的 (EmployeeID , EmployeeName ,Designation ,Salary )。对不起,我错过了,我的错。感谢您向我解释这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 2020-03-24
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
相关资源
最近更新 更多