【问题标题】:How to solve Identity column increment issue when foreign key relationship violates?外键关系违反时如何解决标识列增量问题?
【发布时间】:2016-10-27 19:46:24
【问题描述】:

我使用的是 SQL Server 2012。

我有两个表,tblPerson 和 tblGender。

tblPerson 有 4 列

  • 身份证
  • 姓名
  • 电子邮件
  • GenderID(外键)

tblGender 有 2 列

  • 身份证
  • 性别

tblGender 只有两个条目,男性和女性,id 为 1 和 2。

现在,如果我在 GenderId 列中插入错误数据,如 3、4 等号码。

我该如何解决这个问题?

【问题讨论】:

  • Stop worrying about IDENTITY gaps - 他们真的不是问题!您看到的行为只是身份列的工作方式 - 没有简单的方法可以“解决”这个问题 - 只需接受它并继续前进
  • 如果您真的必须防止这种情况发生,那么您需要验证正在插入的数据实际插入之前将其放入表中,以使这种情况永远不会发生
  • 不要使用身份约束,只需通过获取最大 id 并以 1 递增的方式手动将数据输入到 ID 列
  • @NazirUllah:这真的是非常糟糕的建议 - 在连接了多个客户端的繁忙系统中,这将不起作用 可靠!你很快就会有重复!!请这样做!
  • @marc_s:非常感谢您的回答。

标签: sql-server foreign-key-relationship identity-column


【解决方案1】:

首先,正如已经提到的,这是IDENTITY 列的正常行为。 SQL Server 先插入行,增加标识列的值,然后由于约束失败而拒绝该行。

以下是建议:
1. 让您的ID 列留有空隙。 2. 对于非常连续的“EmployeeID”号码,您可以使用Sequence,您可以从变量中插入:https://msdn.microsoft.com/en-us/library/ff878058(v=sql.110).aspx 那么你的'EmployeeID'应该没有空白。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多