Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否有打印完整合并脚本输出的方法?_Sql_Sql Scripts_Dacpac - Fatal编程技术网

Sql 是否有打印完整合并脚本输出的方法?

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

我使用多个合并脚本在数据库中部署CI/CD。 Dacpac包含在Azure Devops部署Azure DB任务中使用的部署后脚本。 此脚本是多个合并脚本的串联。 我想以某种方式存储更新/删除/插入记录的详细日志。 在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子句,并将其保存到另一个只有两列的日志表中:timestamp和JSON data,或者直接打印出来。该解决方案的问题是我有许多合并Scritp,我不想为每个合并Scritp创建专用表。有没有办法从输出Clouse初始化临时表?或者甚至将输出直接序列化为JSON格式的变量?

如果您无法获取脚本中更新/删除/插入哪些记录的详细日志,那么DevOps管道将无法输出该日志。您的问题似乎更多地与sql脚本有关。您需要先弄清楚如何在脚本中输出信息。所以你可以添加sql脚本标记并删除azure devops标记以获得更好的响应。我从未尝试过,但如果你不能直接输出到JSON,也许你可以直接输出到XML?您是否尝试过在输出中添加一个
forxml
子句?否-XML的工作方式与JSON相同