Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
В триггере можно использовать функцию UPDATE, чтобы определить какое именно поле изменилось, но для истории проще сохранить целиком COLUMNS_UPDATED. Да только потом возникает вопрос, как с этим набором битов работать. Ну т.е. как работать-то понятно, в справке всё есть, но может есть у кого-то примеры готовых функций, которые бы по имени поля возвращали менялось оно или нет, и наоборот по набору битов возвращали имена полей, которые изменились? Думаю это стоит того, чтобы быть помещённым в FAQ, также как преобразование даты в строку, например. :) Ну и ещё один щекотливый вопрос, в каких случаях может изменится порядок полей в таблице? Например, столбец удалили, как вариант. Какие ещё "возможности" для этого? :) З.Ы. Честно признаюсь, поиском по форуму не увлекался, но в тех темах, которые просматривал, изящного решения не нашёл :) В частности: http://www.sql.ru/forum/actualthread.aspx?tid=441997 http://www.sql.ru/forum/actualthread.aspx?tid=548011 Число полей естественно больше 8. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2011, 17:34 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
VladBoyrи наоборот по набору битов возвращали имена полей, которые изменились? Пример B. Using COLUMNS_UPDATED to test more than eight columns из хелпа разве не делает это ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2011, 17:41 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
VladBoyrВ триггере можно использовать функцию UPDATE, чтобы определить какое именно поле изменилось, но для истории проще сохранить целиком COLUMNS_UPDATED.UPDATE и COLUMNS_UPDATED не возвращает поля, которые изменились. Сравнивайте значения из inserted и deleted ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2011, 17:44 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
VladBoyrНапример, столбец удалили, как вариант. Такой вариант прокатывает только как результат команды ALTER TABLE. У UPDATE такое не получится ни в жисть - даже класс команды не тот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2011, 17:56 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
Хотя я может вопрос VladBoyrНу и ещё один щекотливый вопрос, в каких случаях может изменится порядок полей в таблице? не так интерпретировал? Тогда - сорри. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2011, 17:58 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
alexeyvgVladBoyrВ триггере можно использовать функцию UPDATE, чтобы определить какое именно поле изменилось, но для истории проще сохранить целиком COLUMNS_UPDATED.UPDATE и COLUMNS_UPDATED не возвращает поля, которые изменились. Сравнивайте значения из inserted и deleted А что же они возвращают? Я вас не понимаю. %) Мне и не надо в триггере ничего делать. В триггере у меня идёт журналирование, в таблицу History попадают те поля, которые были изменены по update. Мне нужно по прошествии какого-то времени восстановить по истории какие поля изменились. Соответственно, я не могу использовать служебные объекты inserted и deleted, у меня есть лишь поле varbinary(10). Вот для работы с этим полем, для собственного удобства, и написал пару простеньких функций. Задолбался с битовыми масками %) Базовая функция Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Функция №1 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Функция №2 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 15:16 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
SamMan, я наверное просто не очень ясно выразился. %) Ну в общем, если порядок полей меняется, то мы имеем кучу недостоверной информации в поле ColumnsUpdated. Таким образом интересует как обезопасить себя от этого? Например: 1. Не удалять столбцы в таблицах. 2. ... и т.д.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 15:21 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
VladBoyrНу в общем, если порядок полей меняется, то мы имеем кучу недостоверной информации в поле ColumnsUpdated. Это что за поле такое - ColumnsUpdated? В какой таблице? И как эта гадкая "недостоверная информация" в него попадает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 15:36 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
VladBoyr, чего-то не понимаю. Вам же уже, кажется, посоветовали забыть о существовании функции COLUMNS_UPDATED() ввиду её полной практической бесполезности. Ибо она возвращает установленные биты для полей, перечисленных в команде Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 15:50 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
iapпосоветовали забыть о существовании функции COLUMNS_UPDATED() но если поле не упоминалось в update, можно с уверенностью утверждать, что оно не менялось ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 16:01 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
Зайцев Фёдорiapпосоветовали забыть о существовании функции COLUMNS_UPDATED() но если поле не упоминалось в update, можно с уверенностью утверждать, что оно не менялось )Разве что. Очень ценно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 16:18 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
VladBoyralexeyvgпропущено... UPDATE и COLUMNS_UPDATED не возвращает поля, которые изменились. Сравнивайте значения из inserted и deleted А что же они возвращают? Я вас не понимаю. %)Они возвращают те поля, которые были упомянуты в инструкциях insert/update VladBoyrСоответственно, я не могу использовать служебные объекты inserted и deleted, у меня есть лишь поле varbinary(10). Почему не можете? Принципы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 16:46 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
alexeyvgVladBoyrпропущено... А что же они возвращают? Я вас не понимаю. %)Они возвращают те поля, которые были упомянуты в инструкциях insert/update VladBoyrСоответственно, я не могу использовать служебные объекты inserted и deleted, у меня есть лишь поле varbinary(10). Почему не можете? Принципы? естественный ключ. нет возможности сопоставить записи из inserted и deleted ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 16:57 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
Зайцев ФёдорПочему не можете? Принципы? естественный ключ. нет возможности сопоставить записи из inserted и deleted В смысле, ключ меняется? Тогда да, ничего не поделаешь. Но для того случая, когда меняется ключ, нужно считать, что запись со старым ключём удаляется, а с новым - добавляется. Тогда проще - для тех записей, у которых нет сопоставления inserted и deleted, считаем, что записи добавлены-удалены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 17:05 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
VladBoyr, авторВ триггере у меня идёт журналирование, в таблицу History попадают те поля, которые были изменены по update. Мне нужно по прошествии какого-то времени восстановить по истории какие поля изменились. вы имена измененных полей историруете или данные в них? если данные - пихайте в историю неглядя/как-то смотрите на уже имеющуюся историю. потом уже в выборке из истории схлопывайте/подчищайте или вроде того. и если у вас нет возможности сопоставить inserted с deleted - как вы потом по истории понимаете, кто это вообще изменился? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 17:08 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
alexeyvgЗайцев ФёдорПочему не можете? Принципы? естественный ключ. нет возможности сопоставить записи из inserted и deleted В смысле, ключ меняется? Тогда да, ничего не поделаешь. Но для того случая, когда меняется ключ, нужно считать, что запись со старым ключём удаляется, а с новым - добавляется. Тогда проще - для тех записей, у которых нет сопоставления inserted и deleted, считаем, что записи добавлены-удалены. вариант - через вьюху с insteadof триггером и дополнительным фейковым полем (старый ключ/какой-то хэш), которое не менять в апдейте. оно придет и в inserted и в deleted со старым значением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 17:12 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
вариант - через вьюху с insteadof триггером и дополнительным фейковым полем (старый ключ/какой-то хэш), которое не менять в апдейте. оно придет и в inserted и в deleted со старым значением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 17:14 |
|
||
|
COLUMNS_UPDATED
|
|||
|---|---|---|---|
|
#18+
Офигенно! Спасибо! Реально помогло, а то чуть было не "забил" на updated_column() .... VladBoyralexeyvgпропущено... UPDATE и COLUMNS_UPDATED не возвращает поля, которые изменились. Сравнивайте значения из inserted и deleted А что же они возвращают? Я вас не понимаю. %) Мне и не надо в триггере ничего делать. В триггере у меня идёт журналирование, в таблицу History попадают те поля, которые были изменены по update. Мне нужно по прошествии какого-то времени восстановить по истории какие поля изменились. Соответственно, я не могу использовать служебные объекты inserted и deleted, у меня есть лишь поле varbinary(10). Вот для работы с этим полем, для собственного удобства, и написал пару простеньких функций. Задолбался с битовыми масками %) Базовая функция Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Функция №1 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Функция №2 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2018, 20:54 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=37410305&tid=1688920]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
50ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 358ms |

| 0 / 0 |
