Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
То ли лыжи не едут... Совпадение имен полей
|
|||
|---|---|---|---|
|
#18+
Триггер следующего содержания нормальному перевариванию SQLом не подлежит: CREATE TRIGGER udClients ON [dbo].[Clients] FOR UPDATE AS IF (UPDATE(PersonID) AND (PersonID IS NULL)) BEGIN INSERT INTO ClientsHistory (ClientID, PersonID, ActionDate, ActionID,Result,ActionPersonID) VALUES (Inserted.ClientID, PersonID, GETDATE(), 2, 'OK', 31) END Ругается он, судя по всему, из-за того, что поля двух таблиц ClientsHistory и Clients совпадают... И как с ним управиться? Не поля же переименовывать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2001, 18:04 |
|
||
|
То ли лыжи не едут... Совпадение имен полей
|
|||
|---|---|---|---|
|
#18+
попробуй так INSERT INTO ClientsHistory __(ClientID, PersonID, ActionDate, ActionID,Result,ActionPersonID) SELECT __ClientID, PersonID, GETDATE(), 2, 'OK', 31 FROM __inserted ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2001, 18:55 |
|
||
|
То ли лыжи не едут... Совпадение имен полей
|
|||
|---|---|---|---|
|
#18+
А у меня вот эта строчка опасения вызывает: IF (UPDATE(PersonID) AND (PersonID IS NULL)) А что будет, если пользователь одним оператором UPDATE обновит не ОДНУ запись, а НЕСКОЛЬКО - вы из какой записи значение PersonID для проверки на NULL/NOT NULL брать будете? Это очень распространненая ошибка - люди подсознательно полагают, что inserted/deleted содержат одну запись - а они как всякие таблицы могут и сто тысяч записей содержать - в том числе с разными значениями PersonID. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2001, 19:01 |
|
||
|
То ли лыжи не едут... Совпадение имен полей
|
|||
|---|---|---|---|
|
#18+
Если одной транзакцией апдйтится _только_одна_ запись то все прекрасно работает (SELECT использовать надо.): CREATE TRIGGER udClients ON [dbo].[Clients] FOR UPDATE AS IF (UPDATE(PersonID) AND (SELECT PersonID FROM INSERTED) IS NULL)) BEGIN INSERT INTO ClientsHistory (ClientID, PersonID, ActionDate, ActionID,Result,ActionPersonID) SELECT ClientID, PersonID, GETDATE(), 2, 'OK', 31 FROM INSERTED END Если, как говорит Alexander Chepack у тебя несколько значений апдэйтится, то тогда это сойдет: CREATE TRIGGER udClients ON [dbo].[Clients] FOR UPDATE AS IF UPDATE(PersonID) BEGIN INSERT INTO ClientsHistory (ClientID, PersonID, ActionDate, ActionID,Result,ActionPersonID) SELECT ClientID, PersonID, GETDATE(), 2, 'OK', 31 FROM INSERTED WHERE PersonID IS NULL END ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2001, 22:42 |
|
||
|
То ли лыжи не едут... Совпадение имен полей
|
|||
|---|---|---|---|
|
#18+
2Alexandr. Вопрос: Что проверяется - внесение нового зн-ния вместо NULL, или обNULLение существующего? Если последнее , то вариант REX_X, если же нет (что кажется более разумным, иначе м.б. писать NULL в SELECTе), то JOIN с DELETED по РК (ClientId) INSERT ... SELECT I.ClientID, I.PersonID, GETDATE(), 2, 'OK', 31 FROM INSERTED AS I JOIN DELETED AS D ON (I.ClientID=D.ClientID) WHERE D.PersonID IS NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2001, 20:30 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32006114&tid=1826690]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 354ms |

| 0 / 0 |
