azure-devops - 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 命令效果更好,有没有人遇到过类似的问题,他是如何解决的?
解决方案
您可以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"
}
结果:
推荐阅读
- java - 使用 Apache POI 与 Excel 单选按钮和复选框进行编程交互
- c - 无法弄清楚如何将 BYTE* 传递给此方法
- java - java.time.LocalDateTime、java.util.Date 和 java.util.Calendar 有什么区别?
- perl - 计算两个文件perl之间的值
- c++ - C++ - 将 .csv 文件读入向量,同时跳过第一行和特定列
- marklogic - 如何协调 FINAL 数据库中的数据?
- regex - 正则表达式不应该匹配 digit_
- c# - 我需要帮助
在 C# 中格式化字典 - c# - 在 Dynamics 365 API 上运行查询
- python - Python:读取和分析 CSV 文件