如何在 VSTS DB Edition Deploy 中自定义 CREATE DATABASE 语句?

Posted

技术标签:

【中文标题】如何在 VSTS DB Edition Deploy 中自定义 CREATE DATABASE 语句?【英文标题】:How do I customise the CREATE DATABASE statement in VSTS DB Edition Deploy? 【发布时间】:2008-12-03 01:10:53 【问题描述】:

我使用的是 VSTS 数据库版 GDR 版本 9.1.31024.02

我有一个项目,我们将在将客户添加到系统时动态创建多个具有相同架构的数据库。每个客户一个数据库。我想我应该能够使用部署脚本来做到这一点。不幸的是,我总是得到 CREATE DATABASE 语句中指定的完整文件名。例如:

CREATE DATABASE [$(DatabaseName)]
ON 
PRIMARY(NAME = [targetDBName], FILENAME = N'$(DefaultDataPath)targetDBName.mdf')
LOG ON (NAME = [targetDBName_log], FILENAME = N'$(DefaultDataPath)targetDBName_log.ldf')
GO

我希望会有更多这样的东西

CREATE DATABASE [$(DatabaseName)]
ON 
PRIMARY(NAME = [targetDBName], FILENAME = N'$(DefaultDataPath)$(DatabaseName).mdf')
LOG ON (NAME = [targetDBName_log], FILENAME = N'$(DefaultDataPath)$(DatabaseName)_log.ldf')
GO

甚至

CREATE DATABASE [$(DatabaseName)]

我不会持续运行这个,所以我想让它尽可能简单,以供下一个人使用。项目属性中有很多部署选项,但我无法按照我想要的方式进行部署。

有人知道怎么设置吗?

【问题讨论】:

【参考方案1】:

迟到总比没有好,我知道如何从您的第二个示例中获取 $(DefaultDataPath)$(DatabaseName) 文件名。

您在第一个代码 sn-p 中显示的 SQL 表明您没有用于在 VSTS:DB 项目中创建数据库文件的脚本,可能是故意将它们从您所做的任何架构比较中排除。我发现它有点违反直觉,但解决方案是让 VSTS:DB 在您的开发环境中编写 MDF 和 LDF 脚本,然后编辑这些脚本以使用 SQLCMD 变量。

在您的数据库项目中,转到文件夹Schema Objects > Database Level Objects > Storage > Files。在那里,添加这两个文件:

Database.sqlfile.sql

ALTER DATABASE [$(DatabaseName)]
ADD FILE (NAME = [$(DatabaseName)], 
    FILENAME = '$(DefaultDataPath)$(DatabaseName).mdf',
    SIZE = 2304 KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB) 
    TO FILEGROUP [PRIMARY];

Database_log.sqlfile.sql

ALTER DATABASE [$(DatabaseName)]
    ADD LOG FILE (NAME = [$(DatabaseName)_log], 
    FILENAME = '$(DefaultDataPath)$(DatabaseName)_log.ldf', 
    SIZE = 1024 KB, MAXSIZE = 2097152 MB, FILEGROWTH = 10 %);

VSTS:DB 或 VSDBCMD.exe 生成的完整数据库创建脚本现在将使用 SQLCMD 变量来命名 MDF 和 LDF 文件,允许您在命令行或 MSBuild 中指定它们。

【讨论】:

【参考方案2】:

我们使用模板数据库执行此操作,当新客户上线时,我们会备份、复制和恢复该数据库。我们不使用脚本创建任何模式,而是使用实时的空数据库。

【讨论】:

【参考方案3】:

嗯,看来到目前为止最好的答案(鉴于压倒性的反应)是事后编辑文件......仍在寻找

【讨论】:

以上是关于如何在 VSTS DB Edition Deploy 中自定义 CREATE DATABASE 语句?的主要内容,如果未能解决你的问题,请参考以下文章

berkeley db java edition怎样存储数据库?

使用 sql server compact edition 生成的多步 ole db 操作

我可以使用 oracle berkeley db java edition 的 c 实现(python bsddb)创建的 bdb(berkeley db)文件吗?

VSTS 当另一个项目签入时,我们如何触发一个项目的自动构建

VSTS:如何重新排队损坏的构建和切换代理队列

如何在 VSTS 中为 Xamarin iOS 和 Android 部署添加快速通道工具