Sql 是否有打印完整合并脚本输出的方法?
我使用多个合并脚本在数据库中部署CI/CD。 Dacpac包含在Azure Devops部署Azure DB任务中使用的部署后脚本。 此脚本是多个合并脚本的串联。 我想以某种方式存储更新/删除/插入记录的详细日志。 在azure发布日志中,我只有一个信息,即已执行更新脚本(在启用诊断之后) 每个合并脚本都是这样的:Sql 是否有打印完整合并脚本输出的方法?,sql,sql-scripts,dacpac,Sql,Sql Scripts,Dacpac,我使用多个合并脚本在数据库中部署CI/CD。 Dacpac包含在Azure Devops部署Azure DB任务中使用的部署后脚本。 此脚本是多个合并脚本的串联。 我想以某种方式存储更新/删除/插入记录的详细日志。 在azure发布日志中,我只有一个信息,即已执行更新脚本(在启用诊断之后) 每个合并脚本都是这样的: MERGE INTO [Common].[Address] AS Target USING (VALUES (N'00000009-0000-0000-0000-00000
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子句,并将其保存到另一个只有两列的日志表中:timestamp和JSON data,或者直接打印出来。该解决方案的问题是我有许多合并Scritp,我不想为每个合并Scritp创建专用表。有没有办法从输出Clouse初始化临时表?或者甚至将输出直接序列化为JSON格式的变量?如果您无法获取脚本中更新/删除/插入哪些记录的详细日志,那么DevOps管道将无法输出该日志。您的问题似乎更多地与sql脚本有关。您需要先弄清楚如何在脚本中输出信息。所以你可以添加sql脚本标记并删除azure devops标记以获得更好的响应。我从未尝试过,但如果你不能直接输出到JSON,也许你可以直接输出到XML?您是否尝试过在输出中添加一个
forxml
子句?否-XML的工作方式与JSON相同