You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server存储过程改造:更新水印时保留旧水印值

SQL Server水印存储过程改造方案(保留历史水印且不新增记录)

1. 调整水印表结构

先将原有水印表调整为包含Table、OldWaterMark、NewWaterMark的结构,确保每个业务表对应唯一一条记录(用Table列作为主键):

-- 针对已有表的结构调整
ALTER TABLE WatermarkTable
DROP COLUMN IF EXISTS WatermarkValue;

ALTER TABLE WatermarkTable
ADD OldWaterMark VARCHAR(255), -- 根据实际水印值类型调整(如datetime、int)
    NewWaterMark VARCHAR(255);

-- 设置Table列为主键(若未设置)
ALTER TABLE WatermarkTable
ADD CONSTRAINT PK_WatermarkTable_Table PRIMARY KEY ([Table]);

如果是新建表,直接执行:

CREATE TABLE WatermarkTable (
    [Table] VARCHAR(100) PRIMARY KEY,
    OldWaterMark VARCHAR(255),
    NewWaterMark VARCHAR(255)
);

2. 改造后的存储过程

存储过程实现不新增记录、仅更新历史水印的逻辑:当业务表存在水印记录时,将原NewWaterMark移至OldWaterMark,再写入新水印值;不存在则初始化插入。

CREATE PROCEDURE UpdateWatermark
    @TableName VARCHAR(100),
    @NewWatermarkValue VARCHAR(255) -- 按需修改类型(如datetime、bigint)
AS
BEGIN
    SET NOCOUNT ON;

    IF EXISTS (SELECT 1 FROM WatermarkTable WHERE [Table] = @TableName)
    BEGIN
        -- 更新:将旧最新水印转为历史水印,写入新值
        UPDATE WatermarkTable
        SET OldWaterMark = NewWaterMark,
            NewWaterMark = @NewWatermarkValue
        WHERE [Table] = @TableName;
    END
    ELSE
    BEGIN
        -- 初始化:首次插入该业务表的水印记录
        INSERT INTO WatermarkTable ([Table], OldWaterMark, NewWaterMark)
        VALUES (@TableName, NULL, @NewWatermarkValue);
    END
END

3. ADF流水线调用说明

在ADF流水线中调用该存储过程时,只需传入两个参数:

  • @TableName:需要同步的业务表名称
  • @NewWatermarkValue:从ADF获取的最新水印值(如最新时间戳、最大ID等)

内容的提问来源于stack exchange,提问作者newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:10:26