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

时间:2011-03-29 14:54:52

标签: sql-server visual-studio-2010 database-project

我正在查看VS2010中的数据库项目,我的想法是我需要一些东西来跟踪数据库模式(在源代码管理中)以及生成“新安装”脚本和更改脚本的能力。

当我创建一个新的数据库项目向导并导入我现有的数据库模式时,它不会“构建”。我收到错误:

  

SQL03006:用户:[scanner]有一个   未解决的登录参考   [扫描器]。

生成此错误的SQL:

  

创建用户[scanner]登录   [扫描器];

用户“scanner”是我导入的数据库中定义的登录名。我不知道它给我带来了什么,谷歌也没有多大的投入。有什么想法吗?

4 个答案:

答案 0 :(得分:16)

Login实际上是在服务器安装的master数据库中定义的。 CREATE USER语句需要指向现有的Login,否则会出错。数据库项目不知道服务器级别的登录。您可以创建服务器项目来处理登录,也可以关闭数据库项目中安全对象的检查。有关详细信息,请参阅Demetri M的答案:http://social.msdn.microsoft.com/Forums/eu/vstsdb/thread/1f8226fe-b791-4344-8735-3d38307e8664

答案 1 :(得分:8)

我正在将Visual Studio 2012用于SQL Server 2008 R2数据库项目。 @Judah列出的选项似乎不再起作用了。

现在,它们似乎是您在执行架构比较时配置的设置:

右键单击数据库项目> 选择“架构比较”> 选择“设置”齿轮图标> 选择“对象类型”标签>

登录是非应用程序范围的。数据库角色,权限,角色成员资格和用户都是应用程序范围的。

不幸的是,我能找到保留这些的唯一方法是保存模式比较。如果您在团队中共享此内容并且希望任何架构比较的项目/数据库(或服务器)设置,这可能会有点不方便。

但它完成了工作。

答案 2 :(得分:2)

您可以更改创建用户脚本以创建角色。 因此,而不是"为登录loginName创建用户userName;"

使用"创建角色[userName]授权dbo;"

这是一个黑客,但只要您不必处理项目中的用户和角色,您就可以愉快地执行以下操作:

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

答案 3 :(得分:0)

显然,这个问题在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"