代码之家  ›  专栏  ›  技术社区  ›  SpoiledTechie.com

SQL如何在不自动增加ID列的情况下插入行?

  •  28
  • SpoiledTechie.com  · 技术社区  · 16 年前

    我有一个表,它有一个强制的自动递增列,这个列是一个非常有价值的ID,可以在整个应用程序中保留。很抱歉,让这个列自动递增对我来说是糟糕的开发。

    这就是问题所在。我必须在此表中插入一个已经创建并从表中删除的列的ID。有点像重新整理这个身份证,然后把它放回桌子里。

    那么,我如何在不关闭列增量的情况下,通过编程实现这一点呢?如果我错了请纠正我,如果我按程序关闭它,它将在0或1重新启动,我不希望发生这种情况…

    3 回复  |  直到 16 年前
        1
  •  69
  •   Charles Bretana    7 年前

    如果您在Microsoft SQL Server中,可以通过发出语句来“关闭”自动增量功能。 Set Identity_Insert [TableName] On ,如:

      Set Identity_Insert [TableName] On
      -- --------------------------------------------
      Insert TableName (pkCol, [OtherColumns])
      Values(pkValue, [OtherValues])
      -- ---- Don't forget to turn it back off ------
      Set Identity_Insert [TableName] Off
    
        2
  •  8
  •   Tim Cooper    13 年前

    除了Charles的答案(现在100%正确:-)和保留表上标识的当前值之外,您可能还需要检查表上标识的当前值-您可以使用以下命令执行此操作:

    DBCC CHECKIDENT('YourTableName')
    

    如果你真的需要 改变 它可以通过使用以下命令来实现:

    DBCC CHECKIDENT ('YourTableName', RESEED, (new value for IDENTITY) )
    
        3
  •  3
  •   Donald Lancaster    10 年前

    实际上,上面用于indentity_insert的代码是正确的-打开它会告诉服务器您想自己插入值。它允许您将值插入标识列。然后,您希望在完成后将其关闭(允许服务器生成并插入值)。