我需要改变大表(数百万行)上列的大小。它将被设置为nvarchar(n)而不是nvarchar(max),因此根据我的理解,它不会是一个很长的变化。但是,由于我将在生产中这样做,所以我想了解它的后果需要很长时间。
我是否应该从SSMS点击F5,就像执行普通查询一样?如果我的机器崩溃会怎么样?还是去睡觉?进行长时间运行更新的一般最佳做法是什么?它应该被安排为服务器上的工作吗?
由于
答案 0 :(得分:3)
请不要只是按F5。我这样做了一次,丢失了表中的所有数据。根据更改,为您创建的更新语句实际上将数据存储在内存中,删除表,创建具有所需更改的新表,并从内存中填充数据。但是在我的情况下,我做的一个更改是添加一个唯一约束,因此填充失败,并且当语句结束时,内存中的数据被删除。这给我留下了新的空表。
我会创建您正在更改的表,以及您想要的更改,作为新表。然后在新表中选择*,然后在单个语句中重命名表。如果在运行时有可能将数据输入到表中并且这是一个问题,您可能需要锁定表。
根据表的大小和语句的持续时间,您可能希望以后保存锁定和重命名,并在新表的初始填充后执行新数据的差异填充并重命名表格。
很抱歉这篇长篇文章。
编辑: 此外,如果连接因持续时间而超时,则在DB服务器上本地运行insert语句。您也可以创建一个作业并运行它,但它基本上是相同的。