【发布时间】:2016-04-12 19:59:09
【问题描述】:
我无法在我的桌子上进行此审核。
我有一个包含 197 列的表,我想对其进行审核。我们之前已经成功地使用过这个解决方案,但表格总是有较少的列。
我实施的解决方案来自底部的这个 url。
这似乎与我的表有这么多列有关。有没有人对此有任何意见?
【问题讨论】:
-
错误/警告/部分工作?
标签: sql-server security user-input audit
我无法在我的桌子上进行此审核。
我有一个包含 197 列的表,我想对其进行审核。我们之前已经成功地使用过这个解决方案,但表格总是有较少的列。
我实施的解决方案来自底部的这个 url。
这似乎与我的表有这么多列有关。有没有人对此有任何意见?
【问题讨论】:
标签: sql-server security user-input audit
我有两个想法too many columns vs 错误的序号位置。
链接中的代码是 2006 年的。所以它是为SQL Server 2005 编写的。基于COLUMNS_UPDATED():
INFORMATION_SCHEMA.COLUMNS 视图的 ORDINAL_POSITION 列是 与返回的列的位模式不兼容 COLUMNS_UPDATED。
获得兼容的位模式 COLUMNS_UPDATED,引用 COLUMNPROPERTY 的 ColumnID 属性 查询 INFORMATION_SCHEMA.COLUMNS 视图时的系统函数。
CREATE TABLE tab(id INT, col1 INT, col2 INT, col3 INT,
col4 INT, col5 INT, col6 INT, col7 INT, col8 INT);
ALTER TABLE tab DROP COLUMN col1;
ALTER TABLE tab DROP COLUMN col5;
ALTER TABLE tab ADD col9 INT;
ALTER TABLE tab ADD col1 INT;
SELECT column_name,
ordinal_position,
COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME),
COLUMN_NAME, 'ColumnID') AS pos
FROM INFORMATION_SCHEMA.columns
WHERE [TABLE_NAME] like '%tab%'
ORDER BY ordinal_position;
输出:
╔══════════════╦═══════════════════╦═════╗
║ column_name ║ ordinal_position ║ pos ║
╠══════════════╬═══════════════════╬═════╣
║ id ║ 1 ║ 1 ║
║ col2 ║ 2 ║ 3 ║
║ col3 ║ 3 ║ 4 ║
║ col4 ║ 4 ║ 5 ║
║ col6 ║ 5 ║ 7 ║
║ col7 ║ 6 ║ 8 ║
║ col8 ║ 7 ║ 9 ║
║ col9 ║ 8 ║ 10 ║
║ col1 ║ 9 ║ 11 ║
╚══════════════╩═══════════════════╩═════╝
结果:
ORIDINAL_POSITION -> no gaps, range 1-9
pos(aka ColumnId) -> gaps, range 1-11, 2 and 6 skipped
也可以使用UPDATE 来检查列是否已更改:
更新(列)
返回一个布尔值,指示是 INSERT 还是 UPDATE 对表或视图的指定列进行了尝试。更新()是 在 Transact-SQL INSERT 或 UPDATE 主体内的任何位置使用 触发器来测试触发器是否应该执行某些操作。
【讨论】: