取消SQL Server 2000中的表devise更改

在SQL Server企业pipe理器中,更改其中一列并保存它,它将使用新定义创build一个表,并将所有数据复制到该新表中,然后在完成时删除旧表。

但是,如果你的桌子很大(比方说大约100GB),这可能需要很长时间。 更糟糕的是,如果你没有足够的磁盘空间,它不会提前注意到,而且会花费很长时间来复制表格,空间不足,然后决定中止这个过程。

我们还有其他方法可以将数据以较小的块进行复制,但这些方法需要更多的人工干预,所以只要有足够的磁盘空间,让Enterprise Manager找出它们通常会更容易。

因此,对于长时间运行的“devise表”保存像这样,有没有什么办法可以取消一旦开始? 或者你只是等待它失败?

表格变化本质上是primefaces的。 没有办法取消一些操作。 这不是企业pipe理器的错。 例如:

CREATE INDEX IX_Authors_Gender ON Authors ( Gender ) 

将要花费的时间; 没有办法取消这样的操作。

但是,如果您真的想中止操作,因为您知道这将需要很长时间,否则将会失败 – 您迫使SQL Server先放弃该作业:

  • 查杀与SQL Server的连接。 SQL Server将回滚正在进行的任何事务
  • 停止/杀死SQL Server。 当服务器恢复时,任何正在进行的事务都将被回滚

通过使用企业pipe理器IDE来修改表生成的SQL很less是最佳的 – 它会定期生成一个巨大的临时表,删除和创build一些简单的事情,如增加字段长度的命令。 尽可能避免使用IDE并编写自己的脚本。 在考虑运行之前,总是预览更改脚本。

在您描述的场景中生成的SQL将创build一个具有新结构的临时表,将数据复制到适当的转换代码中,删除原始表,然后重命名新的表。 一路走来,它也将放弃像索引和外键的任何依赖关系,并在新表中重新创build它们。 它在一个事务中执行所有这些操作,所以如果这个被中断,那么这个修改就不会被提交。

因此,您可以打开企业pipe理器的第二个实例,在其中打开Process Info,并确定正在执行更改的连接,然后将其终止。 延迟几秒后,另一个提交更改的实例将停止并显示错误,原始表将保持不变。 不过,我真的不想养成这样的习惯。