我最近将我的一个项目更新为 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 中。