关于Visual Studio 2010:VS2010数据库项目部署错误SQL01268目录查找失败

VS2010 DB Project Deploy Error SQL01268 Directory Lookup Failed

我的VS2010数据库部署在构建服务器上失败,该构建服务器上安装了SQL Server 2008 R2。 以下是相关的输出:

Creating Acme.Database...

D:\\TeamCity\\BuildAgent\\Work\\da2fc5ebd5805d44\\src\\Acme.Database\\sql\\Acme.Database.sql(30,0): Error SQL01268: .Net SqlClient Data Provider: Msg 5133, Level 16, State 1, Line 1 Directory lookup for the file"C:\\Program Files\\Microsoft SQL Server**MSSQL10.MSSQLSERVER**\\MSSQL\\DATA\\Acme_Database_log.ldf" failed with the operating system error 3(The system cannot find the path specified.).

D:\\TeamCity\\BuildAgent\\Work\\da2fc5ebd5805d44\\src\\Acme.Database\\sql\\Acme.Database.sql(30,0): Error SQL01268: .Net SqlClient Data Provider: Msg 1802, Level 16, State 1, Line 1 CREATE DATABASE failed. Some file names listed could not be created. Check related errors.

An error occurred while the batch was being executed.

实际路径在这里:

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连接到它,但是无论如何我都无法部署该项目 出现此错误,希望对您有所帮助。


事实证明,如果在Schema Objects \ Database Level Objects \ Storage \ Files(使用Add Item,File)中指定"文件",则在路径中指定的值将覆盖从Server查找的值。如果必须指定它们,则使用sqlcmdvariables $ {DefaultdataPath)$ {Databasename)中的变量填写内容。


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

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

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

[更新]
我建议这样做的原因是,在创建部署脚本期间,如果未在"项目设置"->"部署"选项卡中指定设置,则将从目标服务器的路径中查找DefaultDataPath。


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


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

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

您可以这样设置路径吗?