SSDT - 如何更改每个构建配置的数据库对象名称
SSDT - How to change database object names per build configuration
问题:
我想使用一个 SSDT 数据库项目来管理我的数据库。我想在其中集中数据库开发和自动化部署(主要是存储过程)。
在多租户环境中,对象名称前面是公司名称,
示例:
[dbo].[spu_COMPANY_NAME$Stored Procedure Name]
我们有一个中央数据库,我们在其中进行开发,每次发布时,我们都会对公司名称进行 'Replace All'。
SQLCMD 变量不起作用,因为它们不能包含在对象名称中。
有没有一种方法可以构建,以便在 build/publish 期间为每个构建配置定制存储过程,我得到这样的文件夹结构:
--Database.Project/
--bin/
--CompanyA(build.companyA.congig)/
--CompanyB(build.companyB.congig)/
正如@PeterSchott 在之前的评论中提到的,通过 Powershell 脚本和 Pre/Post 在 Visual Studio 中构建事件可以轻松实现该解决方案。
我会 post 在这里回答,以防有人需要它作为参考(或者也许我需要它)
第一个:
Prebuild powershell 脚本,这个脚本获取项目目录,并根据构建配置将所有字符串替换为 'COMPANY_NAME' 到实际公司名称,用于所有文件其中包含 .sql 扩展名。
下一个:
powershell 脚本:
if ($args[0] -eq "Release"){
$company_name = "ReleaseCorp";
}
$dboDir = $args[1] + 'dbo\';
$sqlFiles = Get-ChildItem $dboDir -rec | Where-Object {($_.Extension -eq ".sql")}
foreach ($file in $sqlFiles)
{
echo $file;
(Get-Content $file.PSPath) |
Foreach-Object { $_ -replace "COMPANY_NAME", $company_name } |
Set-Content $file.PSPath
}
Post-build 事件执行相反的操作,只是这次它采用实际的公司名称进行配置并将其放回令牌,以用于即将到来的构建。
值得注意的是,为了 Visual Studio 能够 运行 Powershell (x86) 脚本,必须执行以下步骤:
运行 Windows 管理员模式下的 Powershell (x86),以及 运行 :
set-executionpolicy unrestricted
有关此内容的更多信息,请参阅 David Frette 的信息博客 post:
Creating Powershell pre-build and post-build events for Visual Studio projects
问题:
我想使用一个 SSDT 数据库项目来管理我的数据库。我想在其中集中数据库开发和自动化部署(主要是存储过程)。 在多租户环境中,对象名称前面是公司名称, 示例:
[dbo].[spu_COMPANY_NAME$Stored Procedure Name]
我们有一个中央数据库,我们在其中进行开发,每次发布时,我们都会对公司名称进行 'Replace All'。
SQLCMD 变量不起作用,因为它们不能包含在对象名称中。 有没有一种方法可以构建,以便在 build/publish 期间为每个构建配置定制存储过程,我得到这样的文件夹结构:
--Database.Project/
--bin/
--CompanyA(build.companyA.congig)/
--CompanyB(build.companyB.congig)/
正如@PeterSchott 在之前的评论中提到的,通过 Powershell 脚本和 Pre/Post 在 Visual Studio 中构建事件可以轻松实现该解决方案。
我会 post 在这里回答,以防有人需要它作为参考(或者也许我需要它)
第一个:
Prebuild powershell 脚本,这个脚本获取项目目录,并根据构建配置将所有字符串替换为 'COMPANY_NAME' 到实际公司名称,用于所有文件其中包含 .sql 扩展名。
下一个:
powershell 脚本:
if ($args[0] -eq "Release"){
$company_name = "ReleaseCorp";
}
$dboDir = $args[1] + 'dbo\';
$sqlFiles = Get-ChildItem $dboDir -rec | Where-Object {($_.Extension -eq ".sql")}
foreach ($file in $sqlFiles)
{
echo $file;
(Get-Content $file.PSPath) |
Foreach-Object { $_ -replace "COMPANY_NAME", $company_name } |
Set-Content $file.PSPath
}
Post-build 事件执行相反的操作,只是这次它采用实际的公司名称进行配置并将其放回令牌,以用于即将到来的构建。
值得注意的是,为了 Visual Studio 能够 运行 Powershell (x86) 脚本,必须执行以下步骤:
运行 Windows 管理员模式下的 Powershell (x86),以及 运行 :
set-executionpolicy unrestricted
有关此内容的更多信息,请参阅 David Frette 的信息博客 post: Creating Powershell pre-build and post-build events for Visual Studio projects