sql-server - 在 Visual Studio 和 SQL Server 中按架构名称比较架构

标签 sql-server visual-studio-2015 schema-compare sql-server-data-project

我有一个具有默认架构和自定义架构的 SQL Server 数据库。例如,两个表可能是 database.dbo.table1database.customschema.table2

我想将“customschema”保留在源代码控制之下,并且我已将其加载到我的 Visual Studio SQL Server 数据库项目中。

当我使用工具 -> SQL Server -> 新架构比较...实用程序时,它返回所有数据库架构的差异。

它会将数据库项目中的所有“dbo”表显示为不同/已删除,即使我不打算将它们保留在源代码控制下的项目中。

有没有办法限制结果以显示我的数据库项目和“customschema”对象的实际数据库之间的差异?

最佳答案

是的,你可以

诀窍是创建一个只能看到该架构的特殊用户。 在 Visual Studio 中使用该用户帐户连接到数据库,它应该可以工作。

您需要为数据库添加新用户:

CREATE USER [customschemaUser] FOR LOGIN [customschemaUser] WITH DEFAULT_SCHEMA=[customschema]

您需要创建一个新角色

CREATE ROLE customschemaRole AUTHORIZATION dbo;

然后将新用户添加到角色

EXEC sp_addrolemember 'customschemaRole', 'customschemaUser';

将架构的所有权设置为新角色

ALTER AUTHORIZATION ON SCHEMA::customschema TO customschemaRole;

现在为新用户授予架构权限

GRANT ALTER, DELETE, EXECUTE, INSERT, REFERENCES, SELECT,
UPDATE, VIEW DEFINITION ON SCHEMA::customschema TO customschemaRole;

GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO customschemaRole;

这样,当您使用 customschemaUser 连接到数据库时,您应该只能看到 customschema 中的对象

关于sql-server - 在 Visual Studio 和 SQL Server 中按架构名称比较架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40287141/

相关文章:

c++ - STL独立初始化列表

sql-server - Visual Studio 2017 中的 SQL Server 比较架构

azure - 架构比较超时

java - Azure混合连接不使用java作为后端代码连接sql server数据库实例

c# - 执行大量并发 INSERT 时如何避免 "Violation of UNIQUE KEY constraint"

c++ - message.pb.h 文件中的 Protobuf : Cannot open include file common. h

sql-server - SSDT Schema Compare向架构文件添加空行

sql-server - 与表不同的存储过程的架构查找(错误?)

sql-server - 调用包含Powershell变量的SQL脚本

c++ - 在 VC++14 中使用 std::basic_stringstream<char16_t> 时出错