24

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

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

SQL03006:用户:[scanner] 对 Login [scanner] 的引用未解析。

产生此错误的 SQL:

CREATE USER [scanner] FOR LOGIN [scanner];

用户“scanner”是我导入的数据库中定义的登录名。我不知道它在告诉我什么,谷歌也没有吐太多。有任何想法吗?

4

4 回答 4

17

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

于 2011-03-29T16:53:34.937 回答
9

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

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

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

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

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

不过,它可以完成工作。

于 2013-02-27T08:37:07.773 回答
2

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

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

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

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

于 2015-09-02T15:49:46.493 回答
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"
于 2018-05-07T17:18:27.273 回答