logging - 在使用合并语句 SQL Server 2008 R2 插入之前将受影响的行插入临时表
问题描述
我创建了以下MERGE
语句,它按预期工作。
不幸的是,由于新的要求,我需要修改这个合并语句。在通过语句插入/更新/删除之前MERGE
,我需要将行捕获到第三个表中。用户审核后,我可以将更改推送到 TARGET 表。
MERGE
声明可以做到这一点吗?
MERGE INTO LARBI_Dim AS TARGET
USING (SELECT *
FROM #LARBI_Dim_view) AS SOURCE ON SOURCE.RefLeaseAssumptionID = TARGET.RefLeaseAssumptionID
WHEN NOT MATCHED BY TARGET
THEN
INSERT ([RefLeaseAssumptionID], isLinkedFlag, isExtendedFlag)
VALUES (SOURCE.[RefLeaseAssumptionID], SOURCE.isLinkedFlag, SOURCE.isExtendedFlag)
WHEN MATCHED AND
(SOURCE.isLinkedFlag <> TARGET.isLinkedFlag
OR SOURCE.isExtendedFlag <> TARGET.isExtendedFlag)
THEN
UPDATE
SET TARGET.isLinkedFlag = SOURCE.isLinkedFlag,
TARGET.isExtendedFlag = SOURCE.isExtendedFlag
WHEN NOT MATCHED BY SOURCE
THEN
DELETE
OUTPUT $ACTION,
getdate() as 'ChangedDate',
Isnull(inserted.[RefLeaseAssumptionID], deleted.[RefLeaseAssumptionID]) as 'RefLeaseAssumptionID',
CASE WHEN $ACTION = 'UPDATE' AND inserted.isLinkedFlag <> deleted.isLinkedFlag
THEN cast(deleted.isLinkedFlag as varchar(30)) + '-->' + cast(inserted.isLinkedFlag as varchar(30))
END as 'isLinkedFlag',
CASE WHEN $ACTION = 'UPDATE' AND inserted.isExtendedFlag <> deleted.isExtendedFlag
THEN cast(deleted.isExtendedFlag as varchar(30)) + '-->' + cast(inserted.isExtendedFlag as varchar(30))
END as 'isExtendedFlag'
;
解决方案
推荐阅读
- java - 即使在 main 函数退出后,这个 java 程序如何继续运行?
- javascript - nodejs中的密码哈希
- swift - 使用 Alamofire 将图像上传到服务器
- r - 调用自定义 S3 方法
- azure - azure devops 安装模块时无法安装模块 Azsk CI / CD 管道
- sql - 将行移到列
- amazon-web-services - 通过具有完整 SSL 的 Cloudflare 访问 S3 存储桶中的静态网站
- python - 用于从 python 中的句子中获取特定输出的正则表达式
- php - 重新索引在 ElasticSearch 中添加新字段不起作用...(php 客户端)
- ansible - Ansible如何在列表的属性中选择嵌套列表