我在 SQL Server 2005 中有一个包含 10000054 条记录的表;这些记录是通过批量插入操作插入的。该表不包含主键,我想要一个。如果我尝试修改表的结构,添加一个新列 PK,设置为 int 和 isidentity,管理控制台会给我一个警告:
“对包含大量数据的表进行更改可能需要相当长的时间。在保存更改时,将无法访问表数据。”
然后输出错误:
" 无法修改表。超时时间已过。在操作完成之前超时时间已过或服务器没有响应。"
我想PK到我的桌子上。
我怎样才能添加它?
我在 SQL Server 2005 中有一个包含 10000054 条记录的表;这些记录是通过批量插入操作插入的。该表不包含主键,我想要一个。如果我尝试修改表的结构,添加一个新列 PK,设置为 int 和 isidentity,管理控制台会给我一个警告:
“对包含大量数据的表进行更改可能需要相当长的时间。在保存更改时,将无法访问表数据。”
然后输出错误:
" 无法修改表。超时时间已过。在操作完成之前超时时间已过或服务器没有响应。"
我想PK到我的桌子上。
我怎样才能添加它?
如果在 Management Studio 中您在设计视图中设置主键(不保存),当您下次右键单击时,您有一个选项“生成更改脚本” - 此选项也可在顶部的“表设计器”菜单中使用。
这提供了原始 SQL(安全地包装在事务中),您可以将其复制到剪贴板,将其作为新查询(左上角按钮,或 File > New > Query with Current Connection)运行,将其粘贴进去,选择正确的数据库并执行查询。
创建一个具有精确模式的新表,并将所需的列作为主键。现在使用 select 插入将记录从一个表复制到另一个表。完成后,删除旧表并将此新表重命名为所需的名称。
尝试生成 SQL 脚本并从 SQL 查询窗口发出它。
您可以使用主键制作一张表。使用 bcp 插入数据时,您可以使用格式文件来映射列。批量复制的格式文件是一个很好的解决方案。使用此解决方案,您可以插入带有身份信息的数据。
从您对 David 的回复中,我了解到您没有合适的主键列。在这种情况下,您可以添加一个 int 标识作为表的最后一列,批量插入将继续工作。
由于表加载了批量插入,因此最好的选择是截断表(截断表 MYTBL);更改它,添加 ID(更改表 TBL 添加 ID int 身份主键)并重新发出批量加载。
如果您无法重新填充表格,您可以使用 stamp 或 hassan 解决方案来更改表格。