如何在SQL Server中向列添加标识?

Ger*_*man 11 sql sql-server sql-server-2008

我有一张大约1000万行的表.我们刚从SQL Server Management Studio的另一个数据库导入它.它创建表但主键列上没有标识和主键.

我可以添加主键但无法添加标识.当我在设计师中做这件事的时候,它一直都是超时的.即使我将时间设置为0.

我需要创建另一个列集主键和标识,从旧复制数据,删除旧列并重命名新列.

任何人都可以告诉我这样的大桌子最好的方法是什么,没有额外的过热?

mar*_*c_s 12

无法添加IDENTITY到现有列.它无法完成.

您需要创建一个类型的列,INT IDENTITY 然后删除不再需要的旧列(并可能将新列重命名为旧名称 - 如果需要)

另外:我不会在可视化设计器中执行此操作 - 这将尝试使用新结构重新创建表,复制所有数据(所有10百万行),然后删除旧表.

它更有效地使用直T-SQL语句-这将做一个"就地"升级,非破坏性的(没有数据丢失),它并不需要大约10个百万行复制的过程中.. .

ALTER TABLE dbo.YourTable
  ADD NewID INT IDENTITY(1,1) NOT NULL
Run Code Online (Sandbox Code Playgroud)

当您INT IDENTITY向表中添加新类型的列时,它将自动填充连续的数字.您无法阻止这种情况发生,您也无法在以后更新这些值.

这些选项都不是真的非常有用,最终 - 你最终可能会得到不同的ID值....要做到这一点,你必须:

  • 提前创建新表,具有适当的结构并且IDENTITY已经到位
  • 然后打开SET IDENTITY_INSERT (yourtable) ON该表以允许将值插入标识列
  • 从原始来源复制此数据
  • 再次关闭身份插入: SET IDENTITY_INSERT (yourtable) OFF

只有使用这种方法,您才能在新表的IDENTITY列中获得相同的ID.

  • @Andomar - 它只是改变表元数据.不必将所有行复制到新表中,也不必将列添加到所有现有行中.[示例代码](http://stackoverflow.com/a/6086661/73226) (2认同)

Ger*_*man 4

好的。我能够向包含 1000 万条记录的现有主列添加标识。我花了大约30分钟。

步骤:

  1. 将数据库更改为单用户模式(以确保没有其他数据库连接,可能导致锁定)

  2. 在设计器模式下打开表

  3. 做出改变。不要保存

  4. 单击“生成更改脚本”按钮(通常位于对象资源管理器的左上方)

  5. 复制生成的脚本
  6. 关闭设计器窗口(一次只能运行一个实例)
  7. 打开新窗口
  8. 执行脚本

  9. 完毕。现在你的专栏有了身份:)