数据库部署(vsdbcmd.exe):DatabaseName和DefaultDataPath被忽略?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库部署(vsdbcmd.exe):DatabaseName和DefaultDataPath被忽略?相关的知识,希望对你有一定的参考价值。
Visual Studio数据库版本附带了一个工具vsdbcmd.exe,该工具应该允许某人将.dbschema文件(由构建时的数据库项目生成)部署到数据库。它通过首先构建脚本然后执行它来完成此操作:
vsdbcmd.exe / a:Deploy / cs:“Data Source =(local); Integrated Security = True; 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 FilesMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLDATA"
因此,正确记录了“targetdb”目标数据库。但是,进一步说:
CREATE DATABASE [$(DatabaseName)]
ON
PRIMARY(NAME = [Original], FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLDATAOriginal.mdf', SIZE = 3072 KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB)
LOG ON (NAME = [Original_log], FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLDATAOriginal_log.ldf', SIZE = 1024 KB, MAXSIZE = 2097152 MB, FILEGROWTH = 10 %)
其中Original.mdf是原始数据库的名称(即我们在开发期间部署的数据库,它是在数据库项目的项目属性中设置的)。这是部署失败的地方,因为在目标计算机上或我的计算机上的确切路径可能不同,因为该数据库已存在。
这些值似乎在生成的脚本中是硬编码的。
这可能是在执行数据库模式同步 - >数据库项目时引起的。 (我的环境是VS2010 Enterprise RTM)。
生成生成的ALTER DATABASE语句以镜像源数据库,而不考虑任何替换值(它还将包括初始数据库大小等)。该问题不会出现在初始数据库导入中。
编辑在...下找到的文件
架构对象数据库级对象存储文件
...并根据需要修复它们以包含正确的$(DefaultDataPath)$(DatabaseName).mdf
/ $(DefaultLogPath)$(DatabaseName)_log.ldf
值 - 或其他值。 (现在在Schema Compare中将它们标记为“Skip”:-P)
通过上述“校正”,保持外部值将再次起作用,并且是管理这些属性的首选方法。
快乐的编码。
根据您的编辑,这可能会有所帮助。 https://blogs.msdn.com/gertd/Default.aspx?p=7
添加变量
到目前为止,我们一直在研究事情是如何工作的,现在是时候添加一些新的变量并将它们付诸实践了。变量派上用场的地方是定义文件的后部署文件:storage.sql。变量将允许用于使位置环境依赖。
在存储文件中,您将找到如下内容:
如果不是EXISTS(SELECT 1 FROM dbo.sysfiles WHERE name ='fgdb_data')BEGIN ALTER DATABASE [$(databasename)] ADD FILE(NAME = N'fgdb_data',FILENAME = N'C: Program Files Microsoft SQL Server MSSQL.1 MSSQL DATA fgdb_data.ndf',MAXSIZE = 100MB,FILEGROWTH = 10MB)TO FILEGROUP [TABLES] END
我们可以对此进行参数化,以便通过变量将驱动器和目录抽象为:
:setvar drive“C:”:setvar目录“Program Files Microsoft SQL Server MSSQL.1 MSSQL DATA”
如果不是EXISTS(SELECT 1 from dbo.sysfiles WHERE name ='fgdb_data')BEGIN ALTER DATABASE [$(databasename)] ADD FILE(NAME = N'fgdb_data',FILENAME = N'$(drive) $(directory) fgdb_data.ndf',MAXSIZE = 100MB,FILEGROWTH = 10MB)TO FILEGROUP [TABLES] END
现在我们已经对脚本进行了参数化,接下来我们希望将变量作为项目文件的一部分,因此我们将它们定义在一个地方,而不是通过:setvar语句分散在各个地方的代码中。
对不起,我刚刚开始自己学习GDR,但我需要答案
以上是关于数据库部署(vsdbcmd.exe):DatabaseName和DefaultDataPath被忽略?的主要内容,如果未能解决你的问题,请参考以下文章