SQL 登录名已存在的错误

Error that SQL Login already exists

我在 VS 2013 中创建了 2 个 SQL 服务器数据库项目,并从驻留在同一 SQL 实例上的 2 个数据库导入了模式。两个数据库都有 SQL 用户,比方说 [MyUser1] 和 [MyUser2],它们使用单​​个 SQL 登录名,比方说 [MyLogin]。问题是两个项目都想创建 SQL 登录,这会导致错误

"SQL71508 The model already has an element that has the same name MyLogin"

DB1 项目

CREATE LOGIN [MyLogin] WITH PASSWORD = N'xyz';

CREATE USER [MyUser1] FOR LOGIN [MyLogin];

DB2 项目

CREATE LOGIN [MyLogin] WITH PASSWORD = N'xyz';

CREATE USER [MyUser2] FOR LOGIN [MyLogin];

我试过:

  1. 正在从其中一个项目中删除 CREATE LOGIN。然后问题是 CREATE USER 生成错误,因为它希望登录的 CREATE LOGIN 存在。
  2. 找到忽略错误的方法,但我发现的只是如何忽略警告。
  3. 使用下面的方法检查登录名是否已经存在,但是在"If"处产生错误,表明"SQL700001 The statement is not recognized in this context".

    If Not Exists (Select name From master.sys.server_principals Where name = 'MyLogin') Begin CREATE LOGIN [MyLogin] WITH PASSWORD = N'xyz'; End

是否有人对如何更正或解决此问题有任何想法?谢谢!

此外,我创建 DB2 项目的主要原因是 DB1 中的视图基于 DB2 中的表。如果没有在 DB1 项目中引用 DB2 项目,SQL 创建视图会生成关于在 DB2 中找不到表的错误。因此,如果有人对如何解决此问题有任何想法,那也会有所帮助。

永远不要在 SSDT 项目中添加相同的项目两次。如果同一项目存在于多个项目中,则为服务器创建一个主项目。

别管用户,只需将登录名移到一个公共项目即可。

在设计 SSDT 项目时考虑继承。不要忘记为每个单独的数据库的部署包含 IncludeCompositeObjects 开关。