Visual Studio 2010 - 导入数据库的数据库项目无法构建

24
我正在查看VS2010中的数据库项目,我的想法是需要一个工具来跟踪数据库模式(在源代码控制中)并生成“新安装”脚本和更改脚本。
当我创建一个新的数据库项目向导并导入现有的数据库模式时,它无法“构建”。我收到以下错误:
SQL03006: User:[scanner]未解析对Login [scanner]的引用。
生成此错误的SQL:
CREATE USER [scanner] FOR LOGIN [scanner];
用户“scanner”是在我导入的数据库中定义的登录名。我不知道它告诉我什么,并且Google没找到太多信息。有想法吗?
5个回答

17

1
两个链接似乎都包含特洛伊木马,根据我公司的Forefront Gateway。 - Tony Kh

9
我正在使用Visual Studio 2012进行SQL Server 2008 R2数据库项目。 @Judah列出的选项似乎不再起作用。
它们现在似乎是您在执行模式比较时配置的设置:
右键单击数据库项目 > 选择“Schema Compare”> 选择“设置”齿轮图标> 选择“对象类型”选项卡> 登录名是非应用程序范围的。数据库角色、权限、角色成员和用户都是应用程序范围的。
不幸的是,我找到的唯一保留这些内容的方法是保存模式比较。如果您想要任何模式比较的项目/数据库(或服务器)设置并与团队共享,则可能会有点不方便。
虽然这样可以完成工作。

我取消了你提到的应用程序范围选项。登录选项已经取消选中了。我保存了模式比较并重新构建了一次,但是我仍然得到相同的错误。我有什么遗漏吗? - Ankur-m

2

您可以更改创建用户脚本以创建角色。

所以,不再使用 "Create user userName for login loginName;",而是使用 "Create Role [userName] authorization dbo;"

这是一种hack方法,但只要您的项目中不需要处理用户和角色,您就可以愉快地执行以下操作:

GRANT EXECUTE ON OBJECT::[dbo].[sp_name] TO [userName];


1
显然,这个问题在VS2017数据库项目中仍然存在。我通过先创建登录,然后创建用户来解决它。
    -- Windows Account
    CREATE LOGIN [Domain\Username]
    FROM WINDOWS WITH DEFAULT_LANGUAGE = [us_english];

    GO

    CREATE USER [Domain\Username] FOR LOGIN [Domain\Username];
    GO

    -- Sql Acccount

    CREATE LOGIN [sql_account] WITH PASSWORD = 'Ch@ngeth1spA$swurD'
    GO

    CREATE USER [sql_account]
    FROM LOGIN [sql_account]
    WITH DEFAULT_SCHEMA = dbo

    GO



    -- Then set the sql file Build Action to "Build"

0
在数据库项目中打开“安全”文件夹(假设数据库是这样导入的)。对于每个引起问题的用户配置文件,在属性面板中将生成操作设置为“无”。您还需要从出现它们的任何其他文件中删除它们,包括Permissions.sql和RoleMemberships.sql。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接