将现有列转换为标识

Bil*_*llz 7 sql t-sql sql-server sql-server-2012

我在SQL Server中有一个包含记录包的表.我想将主键ID列转换为标识列,而不会丢失数据.我想到了以下两种方法:

  1. 使用标识创建一个新表并删除现有表.
  2. 使用标识创建新列并删除现有列.

但很明显,他们无法实施,因为保留记录是我的首要任务.

还有另一种方法吗?

kin*_*ske 6

这个解决方案违反了你的第2点,但没有其他办法,我认为你的目标是保留旧价值观,因为没有其他办法有意义......

您可以执行以下操作:

  1. 可以插入表中的标识列:

    set identity_insert YourTable ON
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将新的 ID 列添加到带有标识的表中,并插入旧列中的值
  3. 关闭身份插入

    set identity_insert YourTable OFF
    
    Run Code Online (Sandbox Code Playgroud)
  4. 删除旧的 ID 列
  5. 将新列重命名为旧名称
  6. 使其成为主键

唯一的问题可能是您的 ID 列已作为外键连接到其他表。那么删除旧列时会遇到问题...在这种情况下,您必须在步骤 3 之后删除 ID 列上的外键约束,然后执行步骤 4 到 6,然后重新创建外键约束。


ste*_*ary 4

当您使用 SQL Server 2012 时,另一种可能的替代方法是创建一个序列对象,该对象的起始值为表中已有的最高 ID +1,然后使用 GET NEXT VALUE FOR 为您的列创建默认约束并引用您的您刚刚创建的序列对象。