我的VS2010数据库部署在构建服务器上失败,该服务器上安装了SQL Server 2008 R2。这是相关的输出:
创建Acme.Database ...
D:\ TeamCity \ BuildAgent \ Work \ da2fc5ebd5805d44 \ src \ Acme.Database \ sql \ Acme.Database.sql(30,0):错误SQL01268:.Net SqlClient数据提供者:消息5133,级别16,状态1 ,第1行文件“C:\ Program Files \ Microsoft SQL Server ** MSSQL10.MSSQLSERVER ** \ MSSQL \ DATA \ Acme_Database_log.ldf”的目录查找失败,出现操作系统错误3(系统找不到指定的路径。 )。
D:\ TeamCity \ BuildAgent \ Work \ da2fc5ebd5805d44 \ src \ Acme.Database \ sql \ Acme.Database.sql(30,0):错误SQL01268:.Net SqlClient数据提供者:消息1802,级别16,状态1 ,第1行CREATE DATABASE失败。无法创建列出的某些文件名。检查相关错误。
批处理执行时发生错误。
实际路径在这里:
C:\ Program Files \ Microsoft SQL Server ** MSSQL10_50.MSSQLSERVER ** \ MSSQL \ DATA \ Acme_Database.mdf
我在数据库项目中找到的路径的唯一引用是在根文件夹中,该文件名为:
PRIMARY.Acme_Database.sqlfile.sql
它包含一个ALTER DATABASE语句,我更改为使用_50路径,但这并没有解决问题。
我不确定db项目为什么需要知道实际数据库MDF文件在哪里位于哪里 - 我原本以为它可以通过TSQL连接到它,但无论如何我无法得到它项目部署此错误,并希望得到任何帮助。
答案 0 :(得分:10)
如果在架构对象\数据库级别对象\存储\文件(使用添加项目,文件)中指定“文件”,则路径中指定的值将覆盖从服务器查找的值。如果必须指定它们,请使用sqlcmdvariables $(DefaultdataPath)$(Databasename)中的变量来填充。
答案 1 :(得分:2)
查看服务器本身的默认文件路径。
截屏视频:http://screencast.com/t/OWM5ODFjZj
您不指定路径的事实可能是问题。
[更新] 我建议这样做的原因是,在创建部署脚本期间,如果您尚未在“项目设置”中指定设置 - >在部署选项卡中,从目标服务器的路径中查找DefaultDataPath。
答案 2 :(得分:1)
我对TeamCity一无所知,所以这可能是一个愚蠢的问题,但你是如何进行部署的呢?看起来DB项目的MSBuild部署任务可以采用提供数据路径的属性:
http://www.codewrecks.com/blog/index.php/2009/10/06/deploy-a-database-project-with-tfs-build/
你能设置那条路吗?
答案 3 :(得分:1)
我有同样的错误,但是有一个不同的解决方案。 对我来说一切都是正确的(据我所知),但生成的部署脚本在databasename变量之前设置路径变量 - 导致对不存在的变量的引用。我更新了Database.sqlcmdvars来硬编码数据库名称值 - 不是最佳实践,而是针对我的需求提供了足够的解决方法。