首页 > 解决方案 > Azure Pipelines - 从 SQL 脚本记录命令

问题描述

我正在尝试从通过 Azure Pipelines 运行的 TSQL 脚本记录一些消息,例如,在创建表之前,我们检查表是否已经存在,如果存在,我们只需打印一条消息并跳过表创建......

有很好的文章解释了如何从 BASH 或 PowerShell 访问 Azure Pipelines 日志记录命令,例如这篇文章:https ://docs.microsoft.com/en-us/azure/devops/pipelines/scripts/logging-commands?view=天蓝色devops&tabs=bash

但是如何从 TSQL 语句本身将消息输出到管道日志?

我将尝试使用 RAISERROR (例如RAISERROR('Table [dbo].[ReportHistory] already exists!', 0, 1) WITH NOWAIT;)希望比 PRINT 命令效果更好,有没有人遇到过类似的问题,他是如何解决的?

标签: azure-devopsazure-pipelines

解决方案


您可以Invoke-Sqlcmd使用-Verbose密钥通过 PowerShell 运行脚本。这是 PowerShell 任务的小示例:

$server = "$(servername)"
$dbname = "$(dbname)"
$u = "$(username)"
$p = "$(password)"
$filename = "testfile.sql"

$filecontent = "RAISERROR('Table [dbo].[ReportHistory] already exists!', 0, 1) WITH NOWAIT;`r`nGO`r`n"

Set-Content -Path $filename -Value $filecontent

Write-Host '##[command] Executing file... ', $filename    

#Execution of SQL packet 
try 
{
    Invoke-Sqlcmd -InputFile "$filename" -ServerInstance $server -Database $dbname -Username "$u" -Password "$p" -QueryTimeout 36000 -Verbose 
} 
catch 
{ 
    Write-Host "##[error]" $Error[0] 
    Write-Host "##[error]----------\n"
} 

结果:

在此处输入图像描述


推荐阅读