当我创建于2012年的SQL一个Visual Studio数据库项目,并将其与现有的数据库(使用比较模式)同步,我也同步SQL Server登录之前就存在。 Visual Studio中生成的登录下面的脚本:的Visual Studio数据库项目:检查是否SQL Server登录创建它
CREATE LOGIN [my_user] WITH PASSWORD = 'somesecurepass'
当我尝试发布,其中该登录存在服务器上生成的SQL,SQLCMD显示我的错误:
The server principal my_user already exists.
当我看由Visual Studio生成的SQL脚本,我发现许多对象都被包装在IF EXISTS语句中,但是CREATE LOGIN未被包装!
我试图手动敷在SQL脚本项目,但后来该项目不建并有指向如果一个错误:
SQL70001: This statement is not recognized in this context.
现在我该怎样强制Visual Studio来生成使用IF EXISTS检查的登录创建脚本也不会失去同步功能?
如何将用户移除到预部署脚本中?只是一个猜测...... – abx78
@ abx78:是的,我想过了,但是我还必须将该登录的实际数据库用户创建移动到部署前(如果我不这样做,Visual Studio会在我说my_db_user对my_user登录有一个不好的引用)。再次 - 如果在将数据库部署到数据库之后,某人运行架构比较,则这些登录名和用户将像最初一样再次出现在项目中。 – JustAMartin
我不明白为什么模式比较发现登录,如果它已经存在于目标中。 –