我在SQL Server 2005中有一张包含10000054条记录的表;这些记录是通过批量插入操作插入的。该表没有主键,我想要一个主键。如果我尝试修改表的结构,添加一个名为PK且设置为int类型的新列,管理控制台会发出警告:
"对于包含大量数据的表进行更改可能需要相当长的时间。在保存更改时,表数据将无法访问。"
然后输出错误:
" 无法修改表格。 超时已过期。操作未能在完成之前超时或服务器没有响应。 "
我想在我的表中加入一个主键。
我该如何添加它?
我在SQL Server 2005中有一张包含10000054条记录的表;这些记录是通过批量插入操作插入的。该表没有主键,我想要一个主键。如果我尝试修改表的结构,添加一个名为PK且设置为int类型的新列,管理控制台会发出警告:
"对于包含大量数据的表进行更改可能需要相当长的时间。在保存更改时,表数据将无法访问。"
然后输出错误:
" 无法修改表格。 超时已过期。操作未能在完成之前超时或服务器没有响应。 "
我想在我的表中加入一个主键。
我该如何添加它?
如果在Management Studio中,在Design视图下设置了主键(未保存),那么下次右键单击时将显示“生成更改脚本”选项。该选项也可在顶部的“Table Designer”菜单上使用。
这提供了原始的SQL(安全地包装在一个事务中),您可以将其复制到剪贴板,将其转到“新查询”(左上角的按钮或“文件”>“新建”>“使用当前连接”的查询),粘贴进去,选择正确的数据库并执行查询。
创建一个与原表格结构完全相同的新表,并将所需列设置为主键。现在使用select语句将记录从一张表复制到另一张表。完成后,删除旧表并将此新表重命名为所需名称。
尝试从SQL查询窗口生成SQL脚本并执行它。
你可以创建一个带有主键的表。当使用 bcp 插入数据时,你可以使用格式文件来映射列。批量复制的格式文件是一个很好的解决方案。 使用这种解决方案,你可以插入带有标识信息的数据。
从您对David的回复中,我了解到您没有适合作为主键的列。在这种情况下,您可以将int identity添加为表的最后一列,批量插入将继续工作。
由于表是通过批量插入加载的,最好的选择是截断表(truncate table MYTBL);修改它,添加ID(alter table TBL add ID int identity primary key),然后重新发出批量加载。
如果您无法重新批量处理表,则可以使用stamp或hassan的解决方案来修改表。