7

我最近将我的一个项目更新为 Visual Studio 2013。更新将我的 .dbproj 更改为 .sqlproj,以使其符合新的 SQL 项目格式。

转换后,我对我的 SQL 项目和我的 SQL 2008 生产数据库进行了模式比较,它现在认为实际上每个对象都是不同的。通过模式比较工具进行调查后,似乎区别在于每个对象定义还包括授予每个角色或用户对该对象的权限的声明。

因此,服务器端看起来像这样:

CREATE PROC MyCoolProc
BEGIN
  --some code
END
GO

GRANT EXECUTE
    ON OBJECT MyCoolProc TO MyAwesomeUser
    AS [Schema];
GO

相同对象的客户端如下所示:

CREATE PROC MyCoolProc
BEGIN
    --some code
END

为什么是这样?当我使用 Visual Studio 2010 运行架构比较时,这并没有发生。此外,我查看了 SQL 比较工具的所有选项,但找不到一个会“忽略对象的权限声明”的选项。任何人都可以帮忙吗?

编辑

只是为了确保这是 Visual Studio 的 SQL 比较工具而不是 SQL Server 本身的问题,我在 Visual Studio 2010 中重新运行了我的暂存数据库和生产数据库之间的比较,并且对象定义不包括对象权限,就像它们一样在 Visual Studio 2013 中。

4

1 回答 1

18

似乎在 Visual Studio 2010 的 SQL 比较工具“架构比较选项”窗口的选项下,“对象类型”选项卡有一个您想要忽略的所有对象类型的复选框。它默认选中“扩展属性”和“权限”。

与 Visual Studio 2013 的 SQL 比较工具“架构比较选项”窗口相比,它的“对象类型”选项卡有一个复选框,用于选择要包含在比较中的所有对象类型。在“Application-scoped”树节点下,默认检查所有对象类型。取消选中“扩展属性”和“权限”会导致此 SQL 比较工具的行为与 Visual Studio 2010 比较工具完全相同。

这可以防止服务器返回无关权限和扩展属性作为每个对象定义的一部分。希望这将帮助遇到同样问题的其他人。

于 2014-06-16T15:35:16.330 回答