更新:使用 Update_Columns() 不是这个问题的答案,因为字段可能会按顺序更改,这会破坏触发器(Update_Columns 取决于列顺序)。
UPATE 2:我已经知道 Deleted 和 Inserted 表保存数据。问题是如何确定发生了哪些变化,而不必对字段名称进行硬编码,因为字段名称可能会更改,或者可能会添加字段。
假设我有一个包含三个字段的表。
该行已经存在,现在用户更新字段 1 和 2。
如何在更新触发器中确定更新了哪些字段,以及之前和之后的值在哪里?
然后我想将这些记录到日志表中。如果有两个字段更新,它应该在历史表中产生两行。
Table
Id intField1 charField2 dateField3
7 3 Fred 1995-03-05
Updated To
7 3 Freddy 1995-05-06
History Table
_____________
Id IdOfRowThatWasUpdated BeforeValue AfterValue (as string)
1 7 Fred Freddy
2 7 1995-03-05 1995-05-06
我知道我可以使用 Deleted 表来获取旧值,并使用插入表来获取新值。然而,问题是如何动态地做到这一点。换句话说,实际的表有 50 列,我不想将 50 个字段硬编码到 SQL 语句中,如果字段发生变化,也不想担心保持 SQL 同步表的变化。
格雷格