SQL Server中的OUTPUT $ action,将特定列的更新后的行输出括起来

时间:2018-08-06 22:03:12

标签: sql-server output upsert sql-merge

我正在对我的数据仓库进行合并更新。我不需要保留该特定对象的历史记录,因此我使用的是我在慢慢改变尺寸的类型。我正在使用OUTPUT $action,所以我可以跟踪每天发生了多少次更新和插入。

我的目标是跳过日志更新步骤,其中更新了特定的列(特别是年龄),因为我希望每个有生日的人都可以更改年龄(我不能包括生日)以保护隐私)。不希望在日志中统计这些更新。

到目前为止,我的日志记录是:

OUTPUT $action, 
CASE $action 
    WHEN 'UPDATE' THEN 'Found matching key: updated existing record' 
    WHEN 'INSERT' THEN 'No matching key: inserted new record'
     END 
INTO @SummaryOfChanges(Change, Reason)

我想添加逻辑说明列age是否已更新,然后跳过日志记录步骤。

$action的插入和删除部分不同,我看不到一种回调有关更新行的信息的方法。我在CASE步骤中尝试了多种OUTPUT语句,但是不了解如何检查age是否是行合并期间更新的列之一。我似乎无法检查age子句中的源OUTPUT和目标process_dframe <- function(){ col1 = c(1, 2, 3) col2 = c(5, 6, 6) new_value = c(0, 0, 0) dframe <- data.frame(col1, col2, new_value) print(dframe) new_val_col_sum <- 0 col1_increment <- 5 size <- length(dframe$col1) print(size) while(new_val_col_sum < 5) { if(new_val_col_sum > 0) { dframe$col1[min_row] <- sum(dframe$col1[min_row], col1_increment) } min_sum <- as.integer(.Machine$integer.max) min_row <- 0 for(i in 1:size) { crnt_sum <- sum(dframe$col1[i], dframe$col2[i]) if(crnt_sum < min_sum) { min_sum <- crnt_sum min_row <- i } } dframe$new_value[min_row] <- sum(dframe$new_value[min_row], 1) new_val_col_sum <- sum(new_val_col_sum, 1) } return(dframe) } d <- process_dframe() print(d) 是否匹配。

对此有什么想法吗?谢谢!

0 个答案:

没有答案