sql - 有没有办法打印出完整的合并脚本输出?
问题描述
我使用多个合并脚本进行 CI/CD 部署数据库。Dacpac 包含用于 Azure Devops Deploy Azure DB Task 的部署后脚本。该脚本是多个合并脚本的串联。我想以某种方式存储更新/删除/插入哪些记录的详细日志。在 azure 发布日志中,我只有一个信息,即执行了更新脚本(启用诊断后)。
每个合并脚本都是这样的:
MERGE INTO [Common].[Address] AS Target
USING (VALUES
(N'00000009-0000-0000-0000-000000000001', N'Sample Street', N'Warsaw', N'15-123', N'Mazowieckie', N'Poland')
)
AS Source ([Id], [Street], [City], [PostalCode], [Voivodeship], [Country])
ON Target.[Id] = Source.[Id]
-- update matched rows
WHEN MATCHED AND (
[Target].[Street] != Source.[Street] OR
[Target].[City] != Source.[City] OR
[Target].[PostalCode] != Source.[PostalCode] OR
[Target].[Voivodeship] != Source.[Voivodeship] OR
[Target].[Country] != Source.[Country]
) THEN
UPDATE SET
[Street] = Source.[Street],
[City] = Source.[City],
[PostalCode] = Source.[PostalCode],
[Voivodeship] = Source.[Voivodeship],
[Country] = Source.[Country]
-- insert new rows
WHEN NOT MATCHED BY TARGET THEN
INSERT ([Id], [Street], [City], [PostalCode], [Voivodeship], [Country])
VALUES (Source.[Id], Source.[Street], Source.[City], Source.[PostalCode], Source.[Voivodeship], Source.[Country])
OUTPUT $action, [deleted].*, [inserted].*;
在输出中,我有我需要的确切信息。
我可以创建专用临时表,列出所有需要的列,然后将输出插入到该表中。然后我可以对整个行集使用 FOR JSON 子句,并将其保存到另一个只有两列的日志表中:时间戳和 json 数据,或者直接打印出来。该解决方案的问题在于我有许多合并脚本,我不想为每个脚本创建专用表。有没有办法从 Output Clouse 初始化临时表?甚至直接将输出序列化为 JSON 格式的变量?
解决方案
推荐阅读
- google-cloud-platform - 您可以使用 Google HTTPS 负载平衡器强制 http/1.1 吗?
- json - 如何将我的结构正确格式化为我正在使用的 API?
- docker - 此 docker 映像是否支持绑定挂载:mcr.microsoft.com/dotnet/core/runtime:3.1-nanoserver-1903
- arrays - 带有字符串的bash脚本
- c# - 如何检查我的 json 字符串是否存在 502 错误
- reactjs - 为什么使用箭头函数声明函数时不需要使用()执行函数?
- python - DolphinDB 像 numpy 那样除以 0 时是否支持 -inf 和 inf?
- mysql - Mysql:由于硬币约束而出现预期错误,但没有发生
- javascript - 如果我在正文中发送带有 json 的请求,则 Cors 问题
- java - java.time - 是否有一个函数可以在两天之间查找特定日期(星期几或月份中的某一天)的数字?