Visual studio 2010 说真的,为SQL数据库项目部署重写sqlcmdvars中的DefaultDataPath

Visual studio 2010 说真的,为SQL数据库项目部署重写sqlcmdvars中的DefaultDataPath,visual-studio-2010,sql-server-2008,webdeploy,Visual Studio 2010,Sql Server 2008,Webdeploy,我在VisualStudio2010中有一个SQL 2008数据库项目,该项目在开发阶段通过模式比较定期同步。该项目也受TFS源代码管理。我有两个环境,调试环境和生产环境。每个环境都是一台同时运行IIS和SQL Server的计算机。但是,生产环境的数据库D:\data\和E:\Logs\的数据和日志路径与我的开发服务器的标准c:\program files\sql….\data不同 我试图做的是设置从调试环境到生产环境处理部署的方式。我已经安装了WebDeploy 2.1,并通过网站项目上的右

我在VisualStudio2010中有一个SQL 2008数据库项目,该项目在开发阶段通过模式比较定期同步。该项目也受TFS源代码管理。我有两个环境,调试环境和生产环境。每个环境都是一台同时运行IIS和SQL Server的计算机。但是,生产环境的数据库D:\data\和E:\Logs\的数据和日志路径与我的开发服务器的标准c:\program files\sql….\data不同

我试图做的是设置从调试环境到生产环境处理部署的方式。我已经安装了WebDeploy 2.1,并通过网站项目上的右键单击上下文菜单在VisualStudio中构建了部署包。我想通过RDP将部署包手动复制到生产服务器,因此这里没有无线连接问题。部署包设置设置为包括在“包/发布SQL”选项卡中配置的所有数据库。在Package/PublishSQL选项卡中,我不从现有数据库的data/schema中提取数据,因为我想从SQL数据库项目中进行部署。因此,我只指向位于数据库项目的/sql/release文件夹中的预生成的.sql脚本文件。最重要的是,我通过VSDBCMD.exe/dd:-/a:Deploy/manifest:…在sql项目中的后期生成事件中生成.sql脚本。。。因此,一个简单的解决方案重建所有,然后网站项目部署确保部署包中始终有最新的.sql脚本

这很好,但我有一个大问题,我似乎无法克服。这与数据库数据和日志文件路径不同于调试环境和生产环境有关。实际上,在生产服务器上的IIS中进行WebDeploy时,我收到一个异常,表示找不到c:\programs files…\MyDatabase.mdf文件。可怕的是,在这个异常之后,整个数据库都被删除了。我在部署之前创建的空数据库。这两次都发生了,我都想胡闹。我不知道我对此有何感想,但我希望我能找到一个可靠的解决办法

我一直在狂热地寻找一种在部署期间更改路径的方法,并发现许多地方提到更改Schema Objects\Database level Objects\Storage\files下*.sqlfiles.sql文件中的路径,因为它尝试部署到的路径是那些文件中指定的路径,这是由于架构比较和写入调试SQL server数据库。更改此处的路径将暂时起作用,直到我执行下一个架构比较和写入,然后sqlfiles.sql文件将再次被调试数据库中的信息覆盖。我不想记住在模式比较期间永远不要更新这些文件,因为任何错误都有可能删除生产数据库

我认为我的救赎在于我的Release.sqlcmdvars文件。这是一个玩笑,实际上,我可以看到一个我“可以”键入默认数据库路径的地方,但它似乎是一个只读字段,因为它提到“默认情况下创建数据库文件的位置(在部署时设置)。”如果我能在这里指定路径,那就太棒了。是否有任何方法可以在变量中指定路径,以覆盖*.sqlfiles.sql文件中的路径

在我工作的解决方案中,sqlcmdvars中有两个自定义变量,分别称为Path1和Path2,我认为它们是执行此操作的保留名称。但是,这在我的解决方案中不起作用,两个解决方案之间的区别在于另一个解决方案是通过TFS build controller部署的。执行TFS构建控制器路由实际上不是一个选项,因为我选择使用第三方源代码管理服务来节省资金

这方面的任何帮助都会很好。我甚至创建了单独的*.sqlfiles.sql文件用于调试和发布,并根据配置将dbproj文件配置为使用一个或另一个,但这似乎也不起作用。此外,在sqlfile.sql文件中使用自定义PATH1变量,如FILENAME='$(PATH1)\Cameleon\u log.ldf',也不起作用。我真的认为不应该这么难。我是不是错过了一些简单的东西


谢谢

好吧,这是徒劳的练习。显然,在脚本生成过程中,如果不与目标数据库同步,那么脚本正是从头开始构建数据库所需要的。即使我可以覆盖文件路径,部署也会抱怨数据库对象已经存在。我需要在部署设置中指定目标数据库的连接字符串,以便在脚本生成期间进行比较,并且只向脚本添加相关的差异。我确实希望避免将我的生产SQL server暴露给外部世界,但事实就是这样。无需再重写路径,因为在比较过程中,数据库文件路径看起来很容易被忽略

好吧,这是徒劳的练习。显然,在脚本生成过程中,如果不与目标数据库同步,那么脚本正是从头开始构建数据库所需要的。即使我可以覆盖文件路径,部署也会抱怨数据库对象已经存在。我需要在部署设置中指定目标数据库的连接字符串,以便在脚本生成期间进行比较,并且只向脚本添加相关的差异。我确实希望避免将我的生产SQL server暴露给外部世界,但事实就是这样。无需再重写路径,因为在比较过程中,数据库文件路径看起来很容易被忽略