4

我的 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 行创建数据库失败。无法创建列出的某些文件名。检查相关错误。

执行批处理时发生错误。

实际路径在这里:

C:\Program Files\Microsoft SQL Server**MSSQL10_50.MSSQLSERVER**\MSSQL\DATA\Acme_Database.mdf

我可以在数据库项目中找到的对路径的唯一引用是在根文件夹中,该文件名为:

PRIMARY.Acme_Database.sqlfile.sql

它包括我更改为使用 _50 路径的 ALTER DATABASE 语句,但这并没有解决问题。

我不确定为什么 db 项目无论如何都需要知道实际数据库 MDF 文件的位置——我原以为它可以通过 TSQL 连接到它,但无论如何我都无法部署项目有这个错误,希望有任何帮助。

4

4 回答 4

10

事实证明,如果您在 Schema Objects\Database Level Objects\Storage\Files 中指定“文件”(使用 Add Item、File),则路径中指定的值会覆盖从服务器查找的值。如果您必须指定它们,请使用 sqlcmdvariables $(DefaultdataPath)$(Databasename) 中的变量来填写内容。

于 2010-09-03T19:05:36.403 回答
2

查看服务器本身的默认文件路径。

截屏:http : //screencast.com/t/OWM5ODFjZj

您没有指定路径的事实可能是问题所在。

[更新] 我建议这样做的原因是,在创建部署脚本的过程中,如果您没有在 Project Settings -> Deployment 选项卡中指定设置,则会从目标服务器的路径中查找 DefaultDataPath。

于 2010-09-02T18:21:53.297 回答
1

我对 TeamCity 真的一无所知,所以这可能是一个愚蠢的问题,但你是如何进行部署的?看起来数据库项目的 MSBuild 部署任务可以采用提供数据路径的属性:

http://www.codewrecks.com/blog/index.php/2009/10/06/deploy-a-database-project-with-tfs-build/

你可以这样设置路径吗?

于 2010-09-02T15:11:55.503 回答
1

我有同样的错误,但有不同的解决方案。对我来说一切都是正确的(据我所知),但是生成的部署脚本在 databasename 变量之前设置了路径变量 - 导致对不存在的变量的引用。我更新了 Database.sqlcmdvars 以硬编码数据库名称值 - 这不是最佳实践,但足以满足我的需求。

于 2012-01-20T17:31:43.967 回答