【问题标题】:How to replace database reference inside SQL script when building database project in Azure Pipeline在 Azure Pipeline 中构建数据库项目时如何替换 SQL 脚本中的数据库引用
【发布时间】:2020-12-17 10:51:30
【问题描述】:

我有一个数据库项目,它在 sql 脚本中有另一个数据库引用在尝试发布到 Azure DevOps Pipelines 时,我无法访问引用的数据库,因为在每个发布阶段我们都有不同的数据库,我们不能只是硬编码数据库名称的值。

例如:

select * from [ReferencedDB].dbo.table1

ReferencedDB 将在每个环境中使用不同的数据库,例如QA、UAT ...等

有没有办法从配置文件中读取 sql 脚本中的值(该配置文件的值是使用变量组更改的)?我的意思是 .NET 项目中的 web.config 之类的东西。

【问题讨论】:

  • 您可以使用 SQLCMD 脚本变量代替数据库名称(例如 [$(ReferencedDB)].dbo.table1)。使用 SQLCMD,使用 -v ReferencedDB=QA" 之类的参数调用以在运行时替换值,或者类似地使用 sqlpackage.exe。变量也可以在您的 azure-pipelines.yml 中定义/设置。
  • 嗨@Adham Enaya。这张票有更新吗?如果答案能给你一些帮助,请随时告诉我。只是提醒this

标签: sql-server database azure-devops configuration


【解决方案1】:

有没有办法从配置文件中读取 sql 脚本中的值(该配置文件的值是使用变量组更改的)?

当然你可以在 Azure Devops 中实现它。

您可以使用 PowerShell 脚本在 Web.config 文件中获取数据库名称。然后您可以将值设置为管道变量(使用Logging command)。最后,您可以使用 Replace Tokens task(From Replace Tokens Extension) 来替换 sql 脚本中的参数。

这是我的例子:

Web.config 文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>  
    <add name="myConnection" connectionString="server=localhost;database=mydatabase;" />
  </connectionStrings>
....
</configuration>

Sql 脚本文件中的 Sql 命令:

select * from #{Database}#.dbo.table1

PowerShell 脚本:

$webConfigFile = [xml](Get-Content "FilePath\Web.config")

$connString = $webConfigFile.configuration.connectionStrings.add
Write-Host "Connection String $($connString.name): $($connString.connectionString)"
$dbRegex = "((Initial Catalog)|((Database)))\s*=(?<ic>[a-z\s0-9]+?);"
$found = $connString.connectionString -match $dbRegex
if ($found)
{
   Write-Host "Database: $($Matches["ic"])"
   $DatabaseName = $($Matches["ic"])
 }



echo "##vso[task.setvariable variable=Database]$DatabaseName"

发布定义:设置Target files -&gt; **/*.sql

结果:

select * from mydatabase.dbo.table1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    相关资源
    最近更新 更多