SQL登录已存在的错误

时间:2015-01-20 22:01:31

标签: sql-server visual-studio visual-studio-2013 sql-server-data-tools

我在VS 2013中创建了2个SQL Server数据库项目,并从位于同一SQL实例的2个数据库中导入了模式。两个数据库都有SQL用户,让我们说[MyUser1]和[MyUser2]使用单个SQL登录,让我们说[MyLogin]。问题是两个项目都想创建SQL登录,这会导致错误

  

" SQL71508该模型已经有一个名为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. 使用以下内容检查Login是否已存在,但是在"如果"指示," SQL700001在此上下文中无法识别该语句"。

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

  4. 有没有人对如何纠正或解决此问题有任何想法?谢谢!

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

1 个答案:

答案 0 :(得分:2)

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

让用户独自一人,只需将登录信息移动到一个公共项目即可。

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