我在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];
我试过了:
使用以下内容检查Login是否已存在,但是在"如果"指示," SQL700001在此上下文中无法识别该语句"。
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中查找表的错误。所以,如果有人对如何解决这个问题有任何想法,那也会有所帮助。
答案 0 :(得分:2)
永远不要在SSDT项目中添加两次相同的项目。如果多个项目中存在相同的项目,请为服务器创建主项目。
让用户独自一人,只需将登录信息移动到一个公共项目即可。
在设计SSDT项目时考虑继承。不要忘记包含IncludeCompositeObjects开关,以便部署每个单独的数据库。