Visual Studio架构比较生成ALTER TABLE sql而不是使用临时表

lui*_*dev 6 database sql-server-2008-r2 visual-studio-2015

我正在测试我的PHP CMS Web应用程序从旧版本(版本1)升级到新版本(版本2).它使用SQL Server 2008 R2数据库.

作为我的测试和文档过程的一部分,我需要获取升级期间将对数据库结构进行的所有更改的列表.为此,我使用Microsoft Visual Studio 2015 Community Edition来比较和"区分"数据库的两个版本.Visual Studio为我提供了升级期间对数据库表所做的所有更改的列表.那很好,但有些东西我不喜欢.

将列添加到新版本数据库中的表时,似乎Visual Studio 2015模式比较工具会以这种方式生成用于添加新列的sql语句:

  1. 它创建了一个临时表: CREATE TABLE [dbo].[tmp_ms_xx_users]
  2. 它将旧表中的数据插入临时表: INSERT INTO [dbo].[tmp_ms_xx_users] SELECT... FROM [dbo].[users]
  3. 然后它丢弃原始表: DROP TABLE [dbo].[users]
  4. 并将临时表重命名为与原始表相同的名称. EXECUTE sp_rename N'[dbo].[tmp_ms_xx_users]', N'users'

[dbo].[users]表现在包含所有原始数据和新列.这没关系,但我不喜欢在我的文档中使用临时表和DROP TABLE语句.

有没有办法让Visual Studio生成表更改语句

ALTER TABLE [dbo].[users] ADD [a_new_column] ... 要么

ALTER TABLE [dbo].[users] DROP COLUMN [old_column] ...

语句而不是使用临时表?

这将使我的文档更好.(我只是出于文档目的而这样做.应用安装程序实际上会在升级过程中处理所有数据库更改.)

谢谢.

小智 2

遇到同样的问题。

该选项在比较两个方案时很有帮助 - 忽略列顺序。也许不仅此选项会影响此行为,而且表更新模型(CREATE 或 ALTER)的选择肯定取决于它。

屏幕截图显示了我的所有选项,在这些选项下我收到了 ALTER 运算符:

在此输入图像描述