将主键添加到包含许多记录的表中

lms*_*asu 20 sql-server bulkinsert primary-key

我在SQL Server 2005中有一个包含10000054条记录的表; 这些记录通过批量插入操作插入.该表不包含主键,我想要一个.如果我尝试修改表的结构,添加一个新列,PK,设置为int with isidentity,管理控制台会给我一个警告:

"对包含大量数据的表进行更改可能需要相当长的时间.在保存更改时,无法访问表数据."

然后输出错误:

"无法修改表.超时已到期.在操作完成之前已经过了超时时间,或者服务器没有响应."

我想把PK放到我的桌子里.

我该如何添加它?

Chr*_*ris 27

如果在Management Studio中您在"设计"视图中设置主键(不保存),则在下次右键单击时,您有一个选项"生成更改脚本" - 此选项也可在顶部的"表设计器"菜单中使用.

这提供了原始SQL(安全地包装在事务中),您可以将其复制到剪贴板,将其作为新查询运行(按钮左上角,或文件>新建>使用当前连接查询),粘贴它,选择右DB并执行查询.


dpi*_*nte 13

我知道这个比较老了,但我遇到了这个并用不同的方式解决了它.假设您正在使用SSMS 2008,您可以进入工具 - >选项

在"设计师"然后"表格和数据库设计者"下,更改"事后超时"值.默认值为30,0为无限.尝试在增加值后创建主键.

这往往要快得多; 创建新数据库,复制数据,删除旧Db并将新数据库重命名为旧数据库.在您完成应用主键后,您也可以将超时设置为30 - 如果您愿意,可以选择.

  • 在SSMS 2008 R2中,您无法在'= 0之后设置'事务超时. (3认同)
  • 这个答案可能是微软的偏好:https://support.microsoft.com/en-us/kb/915849 (3认同)

Hot*_*ter 8

创建一个具有精确模式的新表,并将所需的列作为主键.现在使用select来将记录从一个表复制到另一个表.完成后,删除旧表并将此新表重命名为所需名称.