Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Получить запись, которая была изменена последней  [new]
kikipumpa
Member

Откуда:
Сообщений: 14
Есть ли возможность получить последнюю запись, которая была изменена через update?
18 фев 21, 16:35    [22282955]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
RedBird
Member

Откуда: Москва
Сообщений: 162
kikipumpa,

CREATE TRIGGER dbo.TableName_Update
ON dbo.TableName
AFTER UPDATE 
AS


И ловите "последнюю" запись сколько хотите.
18 фев 21, 16:49    [22282971]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
kikipumpa
Member

Откуда:
Сообщений: 14
RedBird,

и что дальше? отдельную таблицу для таких записей делать?
А в логах каких-нибудь, таблицах системных эта информация не сохраняется?
18 фев 21, 17:00    [22282980]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3971
RedBird
kikipumpa,

CREATE TRIGGER dbo.TableName_Update
ON dbo.TableName
AFTER UPDATE 
AS


И ловите "последнюю" запись сколько хотите.



и как же? предполагается, что "последняя" - это нечто всеми понимаемое однозначно
18 фев 21, 17:17    [22282992]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1560
kikipumpa
А в логах каких-нибудь, таблицах системных эта информация не сохраняется?
Зачем? Зачем серверу сия инфа? И как серверу определять "последнюю" в неупорядоченном наборе в примерно миллион записей в последнем апдейте?
18 фев 21, 17:23    [22282994]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
kikipumpa
Member

Откуда:
Сообщений: 14
Sergey Sizov
kikipumpa
А в логах каких-нибудь, таблицах системных эта информация не сохраняется?
Зачем? Зачем серверу сия инфа?

А зачем люди логи придумали?
Sergey Sizov

И как серверу определять "последнюю" в неупорядоченном наборе в примерно миллион записей в последнем апдейте?

По времени выполнения, например
18 фев 21, 17:52    [22283010]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37146
kikipumpa
А зачем люди логи придумали?
Чтобы эти логи засирали все доступное место, чтобы сбор логов аффектил производительность сервера и чтобы все бежали их первым делом отключать.
18 фев 21, 17:55    [22283012]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3971
kikipumpa
Sergey Sizov
пропущено...
Зачем? Зачем серверу сия инфа?

А зачем люди логи придумали?
Sergey Sizov

И как серверу определять "последнюю" в неупорядоченном наборе в примерно миллион записей в последнем апдейте?

По времени выполнения, например


обана!

это как минимум звучит красиво
18 фев 21, 18:06    [22283023]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54855
kikipumpa
Есть ли возможность получить последнюю запись, которая была изменена через update?
последняя по времени апдейта или коммита?
18 фев 21, 18:42    [22283044]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54855
Ролг Хупин
RedBird
kikipumpa,

CREATE TRIGGER dbo.TableName_Update
ON dbo.TableName
AFTER UPDATE 
AS



И ловите "последнюю" запись сколько хотите.



и как же? предполагается, что "последняя" - это нечто всеми понимаемое однозначно
как вариант - посмотреть в сторону rowversion
18 фев 21, 18:45    [22283045]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8322
kikipumpa,

UPDATE - это операция над математическим множеством, у множеств не бывает ни первой, ни последней записи. Это мешок с картошкой.
18 фев 21, 20:23    [22283089]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54855
Владислав Колосов
kikipumpa,

UPDATE - это операция над математическим множеством, у множеств не бывает ни первой, ни последней записи. Это мешок с картошкой.
инсерт тоже
Но идшник у каждого свой
19 фев 21, 00:58    [22283207]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37146
Владислав Колосов
kikipumpa,

UPDATE - это операция над математическим множеством, у множеств не бывает ни первой, ни последней записи. Это мешок с картошкой.
Типа того. Но rowversion бы каждую картофелину пометил.
19 фев 21, 01:27    [22283210]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8322
Гавриленко Сергей Алексеевич,

Да, но основывать на этом разработку - лукавство и попытки обойти реляционные законы, играя на особенностях механики сервера. Искушения надо преодолевать :)
19 фев 21, 01:42    [22283216]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37146
Владислав Колосов
Гавриленко Сергей Алексеевич,

Да, но основывать на этом разработку - лукавство и попытки обойти реляционные законы, играя на особенностях механики сервера. Искушения надо преодолевать :)
С точки зрения логики -- спорно. С точки зрения физики -- шикарно для всевозможных репликаций, логических моделей блокировок и т.п.
19 фев 21, 01:53    [22283218]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
kikipumpa,
CDC
19 фев 21, 07:28    [22283239]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
kikipumpa
Member

Откуда:
Сообщений: 14
andreymx
kikipumpa
Есть ли возможность получить последнюю запись, которая была изменена через update?
последняя по времени апдейта или коммита?

Можно рассмотреть оба варианта
19 фев 21, 09:06    [22283253]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8820
Мороз крепчал...
... все соскучились по живому общению ...

Самый простой вариант,- если надо отслеживать изменения строк в какой-то определённой таблице:
1. Создаётся таблица, похожая на исходную, с дополнительными полями (RowId - bigint identity(1,1) и RowTime - datetime default getdate() )
2. На интересующую Вас таблицу "вешается" триггер (или несколько,- в зависимости от того, ЧТО именно интересует) - after INSERT|DELETE|UPDATE , который в таблицу-журнал записывает значение полей из служебных таблиц inserted и deleted (они есть в триггерах)

НО , прежде чем всё это делать чётко поймите - ЧТО Вам нужно и ЗАЧЕМ, так как наличие такого журналирования - это просто и очевидно, но может дать очень сильный проигрыш в производительности. На объём базы с журналом сейчас в общем-то всем начхать ;)

PS Триггера на SELECT нет, есличо....
PPS Кстати, коллеги, а почему до сих пор не изобрели триггер на Select ? Мы же можем повесить эвент на доступ к объекту. И понять, что это был select. И связать с id-шником, логином, юзером...
19 фев 21, 09:53    [22283268]     Ответить | Цитировать Сообщить модератору
 Re: Получить запись, которая была изменена последней  [new]
kikipumpa
Member

Откуда:
Сообщений: 14
andreymx
как вариант - посмотреть в сторону rowversion

В процессе гугления rowversion открыл для себя функцию CHANGETABLE - выдает и id записи, и операцию
И из sys.dm_tran_commit_table можно время коммита получить.
Только не разобрался, почему SYS_CHANGE_COLUMNS выдает null, но это уже не обязательно
19 фев 21, 10:54    [22283310]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить