Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 数据库部署(vsdbcmd.exe):是否忽略DatabaseName和DefaultDataPath?_Visual Studio_Visual Studio 2008_Database Project - Fatal编程技术网

Visual studio 数据库部署(vsdbcmd.exe):是否忽略DatabaseName和DefaultDataPath?

Visual studio 数据库部署(vsdbcmd.exe):是否忽略DatabaseName和DefaultDataPath?,visual-studio,visual-studio-2008,database-project,Visual Studio,Visual Studio 2008,Database Project,Visual Studio数据库版附带了一个工具vsdbcmd.exe,该工具应允许用户将由数据库项目生成的.dbschema文件部署到数据库中。它首先构建脚本,然后执行脚本: vsdbcmd.exe/a:Deploy/cs:Data Source=local;综合安全=真实;Pooling=False/dsp:Sql/dd/model:…\Database.dbschema/p:TargetDatabase=TargetDB/manifest:…\Database.deploymanifest

Visual Studio数据库版附带了一个工具vsdbcmd.exe,该工具应允许用户将由数据库项目生成的.dbschema文件部署到数据库中。它首先构建脚本,然后执行脚本:

vsdbcmd.exe/a:Deploy/cs:Data Source=local;综合安全=真实;Pooling=False/dsp:Sql/dd/model:…\Database.dbschema/p:TargetDatabase=TargetDB/manifest:…\Database.deploymanifest

我希望它可以毫无问题地将脚本部署到不同的数据库服务器。但是,实际.mdf文件的完整路径和对原始数据库的一些其他引用一起编码在脚本中。要么没有办法控制,要么我找不到

有人在用这个吗?如何部署?我应该使用另一种数据库项目吗?我记得在数据库项目和服务器项目之间有选择的方法,但我不知道这是否重要

编辑

我可以很好地重写.sqlcmdvars,但这并不能解决问题。这是使用上述命令从生成的.sql文件中提取的:

GO
:setvar DatabaseName "TargetDB"
:setvar DefaultDataPath "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\"
因此,targetdb目标数据库的记录是正确的。但是,还有几行:

CREATE DATABASE [$(DatabaseName)]
ON 
PRIMARY(NAME = [Original], FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Original.mdf', SIZE = 3072 KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB)
LOG ON (NAME = [Original_log], FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Original_log.ldf', SIZE = 1024 KB, MAXSIZE = 2097152 MB, FILEGROWTH = 10 %)
其中Original.mdf是原始数据库的名称,即我们在开发过程中部署的数据库,该名称在数据库项目的项目属性中设置。这就是部署失败的地方,因为目标计算机上的确切路径可能不同,或者在我的计算机上,因为数据库已经存在


这些值在生成的脚本中似乎是硬编码的。

根据您的编辑,这可能会有所帮助。

添加变量

到目前为止,我们一直在研究事情是如何运作的,现在是时候添加一些新的变量并使它们发挥作用了。变量派上用场的一个地方是定义文件的部署后文件:storage.sql。变量将允许使用使位置与环境相关

在存储文件中,您会发现如下内容:

如果不存在,请从dbo.sysfiles中选择1,其中name='fgdb_data' 开始 ALTER DATABASE[$databasename] 添加文件 名称=N'fgdb_data', FILENAME=N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\fgdb\u DATA.ndf', 最大大小=100MB, 文件增长=10MB 到文件组[表] 结束

我们可以将其参数化,以便通过变量将驱动器和目录抽象为:

:setvar驱动器C: :setvar目录程序文件\Microsoft SQL Server\MSSQL.1\MSSQL\DATA

如果不存在,请从dbo.sysfiles中选择1,其中name='fgdb_data' 开始 ALTER DATABASE[$databasename] 添加文件 名称=N'fgdb_data', FILENAME=N'$drive\$directory\fgdb_data.ndf', 最大大小=100MB, 文件增长=10MB 到文件组[表] 结束

既然我们已经对脚本进行了参数化,接下来我们想让变量成为项目文件的一部分,因此我们将它们定义在一个地方,而不是通过:setvar语句分散在代码的各个地方


很抱歉,我自己刚刚开始学习GDR,但我需要这个问题的答案,以

这可能是在执行数据库模式同步->数据库项目时造成的。我的环境是VS2010企业RTM

生成的ALTER DATABASE语句用于镜像源数据库,而不考虑任何替换值。它还将包括初始数据库大小等。初始数据库导入时不会出现此问题

编辑在下找到的文件

架构对象\数据库级对象\存储\文件

…并将其修复为包含正确的$DefaultDataPath$DatabaseName.mdf/$DefaultLogPath$DatabaseName_log.ldf值或其他值(视情况而定)。现在在模式比较中将它们标记为Skip:-P

通过上述校正,保持外部值将再次起作用,并且是管理此类属性的首选方法


快乐编码。

不起作用。在生成的.sql文件中,可以看到实际.mdf文件的路径是硬编码的,即它不在变量中。我将编辑我的问题。我根据您的反馈编辑了我的帖子,我仍在学习GDR,我想自己了解它是如何工作的,只是看到我的编辑-默认的DatabaseName和DefaultDataPath已经有这样的变量,但它们没有在脚本中创建db的特定位置使用。酷。我会接受你的答案,因为我相信它会工作,但没有检查它-自从移动了作业:同样的问题,但我在这个目录中没有文件。