我们讨论的这个警告信息显示如下,当我试着更改AdventureWorks数据库表[GroupName]字段的"Allow Nulls"设置时,下面的警告产生了。
不允许保存更改。你所作的这些更改要求删除并且重新创建下面的表。你只能对表进行不能重新创建的更改或者启用这个选项来防止保存要求对表重新创建的更改。
图一
我具有在这张表上执行DDL语句的权限,而在这张表上也没有阻止它重新创建的锁。因此唯一的原因应该是"or enabled the option Prevent Saving changes that require the table to be re-created"的信息部分。
因此让我们看看这个选项,接着看看一些要求重新创建表并且与通过SSMS进行更改有关的潜在威胁类型。
从菜单中选择“工具”然后选择“选项…”
图二
点击页面左边的"Designers"
图三
上面的标记选项在检查时防止在SSIS中要求重新创建表的任何更改。默认情况下,这个选项是检查的。如果它允许你通过要求对表重新建立的SSMS来做任何改变,那么你可以不检查它。一旦这个选项设为未检查的,那么你讲不能得到一个要求表重新创建的更改以及执行你的更改的警告信息。
要求重新创建表的一些情况是:
修改一个字段的数据类型
在一张表的最后一个字段之前在任何一个地方插入一个字段
修改一个计算列的计算列表达式
修改一个计算列的persistence属性
修改一个字段的identity属性
修改一个字段的NULL属性
对表中的字段重新排序
重要的是要了解通过SSMS进行更该会带来一些后果。微软强烈建议不要关闭这个选项。你可能会经历与该表相关的信息缺失甚至在某些情况下会缺失数据。作为信息相关缺失的例子,微软支持提出如果更改跟踪功能可用的话,那么可以使用与表相关的更改跟踪。如果这张表也包含大量的数据,那么重新创建表可能会导致超出操作时间从而无法完成该过程。
同时考虑到微软的建议,您最好启用这个选项。但是在某些情况下,禁用这个选项会使你更好地利用SSMS设计器进行工作。这些情况是:你在测试环境中工作。
要求进行一些不能通过T-SQL的操作。例如,在其它字段的中间插入一个新的字段。在这样的案例中,正确分析这些表的任何问题/损失作为重新创建表的结果。
你确定没有相关的数据,例如与你任何一张表有关的更改跟踪数据。
你确定硬件具有足够的空间来避免任何超时的操作。