我有两张 table ; ItemTable
和 ProductTable
。 ProductTable
的 ItemID
列链接到 ItemTable
的 ID
列。两个表的 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
与新的 ItemID
和 Latest = 1
这种自动
INSERT
和 UPDATE
最好只使用纯 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/