我有大约100个表的数据库,我需要在所有这些表上实现插入,更新和删除等操作的日志 .

我决定使用触发器作为日志记录机制,我遇到的问题是动态获取构成主键的列的值(一些主键是标识,一些是由两列组成的复合键) .

我知道这可以通过动态SQL来完成,但我问自己,现在甚至你,是否有可能以某种方式避免触发器定义中的动态SQL .

所以,我的日志表看起来像:

CREATE TABLE [dbo].[HistoryTable](
    [HistoryTable] [int] IDENTITY(1,1) NOT NULL,
    [PKValues] [varchar](50) NOT NULL,
    [AllValues] [nvarchar](500) NOT NULL,
)

因此,如果table包含复合主键,则受insert,update或delete操作影响的列的值必须是一个值,其值以逗号或分号分隔:

PKValues    AllValues

1;1         <row columnId1=1 columnId2=1 Title="test" />
1;2         <row columnId1=1 columnId2=2 Title="test2" />
1           <row columnId1=1 Title="test3" />
...

示例中的前两行来自具有复合主键的表,第三行来自具有单一标识列的表作为主键 .