powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Контроль изменения полей таблицы для MS SQL 2000
4 сообщений из 4, страница 1 из 1
Контроль изменения полей таблицы для MS SQL 2000
    #32015904
DennisL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У когнибудь есть код триггера который ведет запись любых изменений в полях таблицы ?

таблица log-а в моем представлении могла бы быть примерно такой :

Дата, Поле, Старое значение, НОвое значение, Пользователь
...
Рейтинг: 0 / 0
Контроль изменения полей таблицы для MS SQL 2000
    #32015907
На www.gvu.newmail.ru лежит (в нутрях библиотеки "UNDO")
...
Рейтинг: 0 / 0
Контроль изменения полей таблицы для MS SQL 2000
    #32015945
Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сайте www.embarcadero.com есть фишка Change Manager...(Там кстати целая куча всего..)
можно пользоваться и при большом желании найти ключ на хакерских сайтах (если уж начальство нехочет платит а очень надо...)
...
Рейтинг: 0 / 0
Контроль изменения полей таблицы для MS SQL 2000
    #32015963
vlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Вам нужно только то что вы написали - то вот пожалуйста, написано при участии народа с этого форума, реально работает у меня на SQL 7

CREATE TRIGGER T_НасПункты_ToLog ON [T_НасПункты]
FOR UPDATE
AS
Declare @usr char(15)
Set @usr=user


Select * Into #t_Ins from inserted
Select * Into #t_Del from deleted

-- объявляем курсор
DECLARE curCOLNAMEofT_NasPunkty CURSOR READ_ONLY
FOR
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='T_НасПункты'

OPEN curCOLNAMEofT_NasPunkty

DECLARE @colname sysname

FETCH NEXT FROM curCOLNAMEofT_NasPunkty INTO @colname

WHILE (@@FETCH_STATUS = 0)

BEGIN

Insert Into LOG..UPDATEDINFO(cTablesrc, cFieldsrc, iRowid, cOldvalue, cNewvalue, cWho, dtWhen) EXEC('Select ' +''''+ 'Н' +'''' + ', ' + '''' +@colname + '''' + ', d.[Код] ' + ', d.'+@colname + ', i.' + @colname +', ' + ''''+ @usr + '''' +', ' + 'GETDATE()' + ' FROM #t_Ins i JOIN #t_Del d ON i.[Код] = d.[Код] AND (i.' + @colname + ' <> d.'+@colname + ' Or (d.'+ @colname + ' Is Null And i.'+@colname + ' Is Not Null ) Or (i.'+ @colname + ' Is Null And d.'+@colname + ' Is Not Null ) )')

FETCH NEXT FROM curCOLNAMEofT_NasPunkty INTO @colname

END

CLOSE curCOLNAMEofT_NasPunkty

DEALLOCATE curCOLNAMEofT_NasPunkty
===================================================================================
Прим.
1. Фиксируются изменения во всех поля таблицы (при необх. какое-то можно исключить)
2. Времянки используются потому, что служебные таблицы тригера нельзя использовать в Exec
3. Таблица логов (у меня в отдельной базе, Вы смотрите сами) служит для логирования изменений не только из этой таблицы, поэтому имеет доп поле cTablesrc - какой- то краткий идентификатор таблицы-источника в которой изменили что-то.
4. Корректно работает при multirow изменениях
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Контроль изменения полей таблицы для MS SQL 2000
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]