2016-01-08 3 views
1

У меня возникла проблема с тем, чтобы этот аудит работал на моем столе.Аудит таблицы Microsoft SQL Server со многими столбцами

У меня есть таблица с 197 столбцами, и я хочу ее проверить. Мы успешно использовали это решение, но таблицы всегда имели меньшие столбцы.

Решение, которое я реализовал, - это этот url внизу.

Кажется, что это как-то связано с тем, что в моем столе столько столбцов. Кто-нибудь имеет какие-либо сведения об этом вообще?

Pop Rivett SQL Server Audit

+0

Ошибка/предупреждение/работа частично? – lad2025

ответ

1

У меня есть две идеи too many columns против неправильного порядкового положения.

Код ссылки от 2006 г. Так было написано для SQL Server 2005. На основании COLUMNS_UPDATED():

ORDINAL_POSITION колонка зрения INFORMATION_SCHEMA.COLUMNS является не совместим с битовой комбинации столбцов, возвращаемого COLUMNS_UPDATED.

Чтобы получить битовый шаблон, совместимый с COLUMNS_UPDATED, ссылки на свойстве ColumnID функции системы COLUMNPROPERTY при запросе вида 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; 

SqlFiddleDemo

Выходные:

╔══════════════╦═══════════════════╦═════╗ 
║ 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 

Альте rnatively, чтобы проверить, если столбец chagned или вы не можете использовать UPDATE:

UPDATE (колонка)

Возвращает логическое значение, указывающее, была ли сделана INSERT или UPDATE попытки на указанный столбце таблицы или просмотр. UPDATE() - это , используемый в любом месте тела триггера Transact-SQL INSERT или UPDATE , чтобы проверить, должен ли триггер выполнять определенные действия.

 Смежные вопросы

  • Нет связанных вопросов^_^