我在VS2010中有一个SQL 2005数据库项目。我有一个正在创建并授予数据库权限的用户。
Test.user.sql
CREATE USER [$(MachineName)\Test] FOR LOGIN [$(MachineName)\Test] WITH DEFAULT_SCHEMA = dbo;
GO
EXEC sp_addrolemember N'db_datawriter', N'$(MachineName)\Test'
GO
EXEC sp_addrolemember N'db_datareader', N'$(MachineName)\Test'
GO
我为$(MachineName)
定义了一个SQLCMDVAR,它根据所选配置(Debug(Dev),QA,UAT,Production)保存机器的名称。在生成的SQL的顶部正确设置了此变量:
:setvar MachineName "TheMachineName"
部署此项目时,将删除上述脚本中创建的用户,然后重新创建该用户,并撤消该用户的权限。在部署期间,生成的有关此用户及其权限的内容取决于数据库中用户的状态。
如果用户存在datareader
和datawriter
权限,则会撤消这些权限,删除用户,然后重新创建用户,而权限则不会。 Visual Studio在sp_addrolemember
命令所在的位置添加了这一行:
PRINT N'Altering <unnamed>...';
GO
PRINT N'No script could be generated for operation 2 on object ''<unnamed>''.';
GO
PRINT N'Altering <unnamed>...';
GO
PRINT N'No script could be generated for operation 2 on object ''<unnamed>''.';
GO
如果我再次部署项目,则会正确生成权限并将其应用于用户:
PRINT N'Creating <unnamed>...';
GO
EXECUTE sp_addrolemember @rolename = N'db_datareader', @membername = N'$(MachineName)\Test';
GO
PRINT N'Creating <unnamed>...';
GO
EXECUTE sp_addrolemember @rolename = N'db_datawriter', @membername = N'$(MachineName)\Test';
GO
我无法弄清楚为什么会这样,有什么建议吗?
答案 0 :(得分:1)
这是Visual Studio中的已知错误。请参阅vsts 2010 database deployment error和vsts 2010 database deployment error。有一些迹象表明这可以在Microsoft SQL Server Data Tools中修复。如果你在XP上,虽然SSDT需要Vista或更高版本才能安装,但你运气不好。