1

我正在使用触发器来审核表更改。现在,我在以下内容中捕获了各个列的更改:

DECLARE @statement VARCHAR(MAX)
SELECT @statement =
'Col1: ' + CAST(ISNULL(Col1, '') AS VARCHAR) + ', Col2: ' + CAST(ISNULL(Col2, '') AS VARCHAR) + ', Col3: ' + CAST(ISNULL(Col3, '') AS VARCHAR)
FROM INSERTED;

问题是,我需要调整要审计的每个表/触发器的列名。有没有一种方法可以使用更通用的方法构建@statement,独立于表?

欢呼大卫

4

1 回答 1

1

您需要做的是使用以下查询构建一个内存表,然后循环通过它来生成您想要的 SQL 语句

从 information_schema.columns 中选择 column_name 其中 table_name like 'tName' order by ordinal_position

但是我不确定这对 AUDIT 来说是不是正确的做法。以后怎么拉回来。假设在您的某个版本中,您碰巧删除了该列,然后会发生什么?你怎么知道哪一列保存了哪些数据。

于 2012-05-28T15:44:44.200 回答