我有两张 table ; ItemTableProductTableProductTableItemID 列链接到 ItemTableID 列。两个表的 ID 列是主键和标识列。

像这样:

ItemTable:

ID    Col      ColOther    Latest    Time
100   'old'    'oldother'  1         <Autogenerated timestamp>


ProductTable:

ID    ItemID   Value   ValueOther   Latest   Time
12    100      'foo'   'bar'        1        <Autogenerated timestamp>

每当我想 手动 UPDATE ItemTable 中的一行时,通常只需一个查询即可完成:
query = \
    """
    UPDATE ItemTable
    SET Col = ?, ColOther = ?
    WHERE ID = 100;
    """
cursor.execute(query, 'new', 'newother')

而不是像上面那样做 UPDATE ,我想为 ItemTable 做这些事情:
  • 自动 UPDATE 旧行有 Latest = 0
  • INSERT 具有更新值的行,以及 Latest = 1(假设该行获得 ID 250)

  • 然后对于 ProductTable :
  • 自动 UPDATE ProductTable 中的旧链接行有 Latest = 0
  • 自动将 INSERT 与新的 ItemIDLatest = 1
  • 放在同一行


    这种自动 INSERTUPDATE 最好只使用纯 SQL 查询(可能使用 OUTPUT ,但我不熟悉),或者它可以用一些 Python 代码实现。我该怎么做呢?

    想要的最终结果:

    ItemTable:
    
    ID    Col      ColOther     Latest    Time
    100   'old'    'oldother'   0         <Autogenerated timestamp>
    250   'new'    'newother'   1         <Autogenerated timestamp>
    
    
    ProductTable:
    
    ID    ItemID   Value   ValueOther   Latest   Time
    12    100      'foo'   'bar'        0        <Autogenerated timestamp>
    110   250      'foo'   'bar'        1        <Autogenerated timestamp>
    

    最佳答案

    如果您使用的是现代版本的 SQL Server(即 >= SQL Server 2016 SP1)

    您是否考虑过为此使用 临时表
    您可以在 Microsofts BOL 阅读更多信息

    这是跟踪表更改的一种非常智能的方法。它表现良好,但更改表结构需要一些工作。

    关于python - 更新一行时,如何同时保留旧值并更新链接表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52052296/

    10-12 00:27
    查看更多