Azure devops Azure管道-从SQL脚本记录命令

Azure devops Azure管道-从SQL脚本记录命令,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我正在尝试记录通过Azure管道运行的TSQL脚本中的一些消息,例如,在创建表之前,我们检查表是否已经存在,如果已经存在,我们只需打印一条消息并跳过表创建 有一些很好的文章解释了如何从BASH或PowerShell访问Azure管道日志记录命令,例如本文: 但是如何从TSQL语句本身向管道日志输出消息呢 我将尝试使用RAISERROR(例如,RAISERROR('Table[dbo].[ReportHistory]已经存在!',0,1)和NOWAIT;)希望它比PRINT命令工作得更好,有没有人

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

有一些很好的文章解释了如何从BASH或PowerShell访问Azure管道日志记录命令,例如本文:

但是如何从TSQL语句本身向管道日志输出消息呢


我将尝试使用RAISERROR(例如,
RAISERROR('Table[dbo].[ReportHistory]已经存在!',0,1)和NOWAIT;
)希望它比PRINT命令工作得更好,有没有人有过类似的问题,他是如何解决的?

您可以通过PowerShell
调用Sqlcmd,使用
-Verbose
键。下面是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"
} 
结果:


您可以使用
-Verbose
键通过PowerShell
调用Sqlcmd
运行脚本。下面是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"
} 
结果:


您可以将Azure管道日志记录命令与打印和RAISERROR命令一起使用

日志命令语法
##vso[task..]
是Azure devops管道中的保留关键字。当在任务的输出流中找到
#vso[task..]
时,Azure devops管道将执行日志记录命令

因此,您可以使用带有PRINT或RAISERROR的日志记录命令从TSQL语句中向管道日志输出消息。请参见以下示例:

PRINT N'##vso[task.logissue type=warning]Table already exists.';

RAISERROR('##vso[task.logissue type=warning]Table [dbo].[ReportHistory] already exists!',0,1);
请参阅以下管道日志中的输出消息:


您可以将Azure管道日志记录命令与打印和RAISERROR命令一起使用

日志命令语法
##vso[task..]
是Azure devops管道中的保留关键字。当在任务的输出流中找到
#vso[task..]
时,Azure devops管道将执行日志记录命令

因此,您可以使用带有PRINT或RAISERROR的日志记录命令从TSQL语句中向管道日志输出消息。请参见以下示例:

PRINT N'##vso[task.logissue type=warning]Table already exists.';

RAISERROR('##vso[task.logissue type=warning]Table [dbo].[ReportHistory] already exists!',0,1);
请参阅以下管道日志中的输出消息:


您好,您有机会尝试下面的答案吗?进展如何?嗨,你有机会尝试下面的答案吗?进展如何?