查找最近添加的行并添加值



我有一张桌子,每天早上都会重新加载和中继。它没有任何日期/时间列,也没有自动增量列。

我需要一个查询来计算每天早上添加了哪些行,并为具有特定值的每一行向表中添加一个新列(如果它是新的,则为另一列,如果不是)。此外,如果可能,请添加包含添加行的日期的第二列。

的想法是,我每天都复制表格,然后在第二天将其与新表格进行比较。

这甚至可能做到吗,如果是这样,我该怎么做?在不更改数据写入表的方式的情况下,有没有更好的方法?

是的,考虑到对原始表的约束,创建第二个表似乎是一个合理的解决方案

好的,所以在第 1 天,您创建影子表并填充它:

CREATE TABLE Shadow (/* Same columns as original, plus added date, magic value column */)
INSERT INTO Shadow (/* Same columns as original, plus added date, magic value column */)
SELECT /* Columns, plus todays date and the magic value column */ FROM Original

然后,在随后的日子里:

ALTER TABLE Original ADD MagicColumn int null
GO
ALTER TABLE Original ADD AddedDate date null
GO
MERGE INTO Original o
USING Shadow s
     ON o.PK1 = s.PK1 and o.PK2 = s.PK2
WHEN MATCHED
   THEN UPDATE
      SET
         AddedDate = s.AddedDate,
         MagicColumn = 1 /* Value for updated */
WHEN NOT MATCHED BY SOURCE
   THEN UPDATE
      SET
         AddedDate = CURRENT_TIMESTAMP,
         MagicColumn = 0; /* Value for new */
GO
TRUNCATE TABLE Shadow
GO
INSERT INTO Shadow (/* Same columns as original, plus added date, magic value column */)
SELECT /* All columns */ FROM Original

其中一些语句需要位于单独的批处理中(例如,ALTER TABLE语句需要与MERGE位于不同的批处理中),因此,如果您在 SQL 代理作业中执行此操作,它们应该在不同的步骤中。

我一直提到"魔术值列",因为我不确定如何称呼包含以下内容的列:

某个值(如果它是新的,则为一个值,如果不是,则为另一个值)

相关内容

  • 没有找到相关文章

最新更新