首页蓝耳朵|小小蓝耳朵广州图书馆外文室英语儿童读物资源介绍网佛教青年之友旧版收集永硕E盘Phonics Short Vowels Game 
阻止保存更改需要重新创建表(Saving changes is not permitted)
所属栏目:MS SQL 2008  时间:2010-08-17 12:55  作者:狼子

MS SQL 2008下,在修改表结构的时候,提示:不允许保存更改。您所做的更改要求删除并重新创建以下表。

记录以下网址

Error message when you try to save a table in SQL Server 2008: "Saving changes is not permitted"
http://support.microsoft.com/kb/956176/en-us?fr=1

Configuring and Managing Change Tracking
http://msdn.microsoft.com/en-us/library/bb964713.aspx

A Look at SQL Server 2008 Change Tracking
http://www.databasejournal.com/features/mssql/article.php/3875186/A-Look-at-SQL-Server-2008-Change-Tracking.htm

SQL Server 2008新特性:更改跟踪
http://www.dwww.cn/News/2009-4/2009481942279028.shtml

根据第一个地址

This problem occurs when the Prevent saving changes that require the table re-creation option is enabled, and you make one or more of the following changes to the table:
You change the Allow Nulls setting for a column.
You reorder columns in the table.
You change the column data type.
You add a new column.

在studio里,修改是否允许null值、重新给列排序、修改数据类型、添加新列的时候,会要求“重建表”

我把脚本导出来看过,有这两句的:

DROP TABLE dbo.Users
GO
EXECUTE sp_rename N'dbo.Tmp_Users', N'Users', 'OBJECT'
GO

就是说,这些修改是先创建一个临时表,把数据全部导过去,然后呢,删除原来的表,把临时表改名成原表的名字,这就是重建表

百度好多人都说要修改设置,在“工具”->“选项”里,选择“Designers\表设计器和数据库设计器”,再把“阻止保存要求重新创建表的更改”前的勾去掉,如下图:


就是,官方不建议这样子做,在第一个链接里提到了:

We strongly recommend that you do not work around this problem by turning off the Prevent saving changes that require table re-creation option.

官方不建议是因为去掉这个选项后,有可能会导致数据丢失

比如,在sql 2008里多了一个Change Tracking,可以跟踪一个表的数据更改

如果这里的选项设置为true,在重建表的时候,重建表以前的跟踪记录会被删除

官方建议在这种情况下,使用tsql修改表结构,不要把“阻止保存要求重新创建表的更改”前的勾去掉

小楼宝宝的涂鸦花花(Imitater)的博客起名称骨测字