Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
В одном триггере (Удалить+Обновить)
|
|||
|---|---|---|---|
|
#18+
Нужно решить такую задачку: (сразу оговорюсь структуру базы разрабатывала не я и кординально перестроить ее не представлется возможным) Есть таблица Документы, в ней хранится информация о бухгалтерских документах Некоторые документы "завязаны" друг-на-друге, т.е. платежка имеет в дополнит. поле ссылку на ID счет-фактуры, в свою очередь счет-фактура в дополнит. поле ссылается на множество платежек. Эта связь "искусственна", т.е. доработана мной в пределах возможных настроек имееющейся ПО ("Акцент-бухгалтерия", Импакт, Донецк). Если с вопросом "привязки" документов друг с другом - все решено и работает отлично, то проблема удаления документа из "связки" - никак не поддается. Думала дописать имееющийся триггер на удаление (сейчас он содержит каскадное удаление из связанных таблиц), так не тут-то было - вместе с удалением одной строки (к примеру ведомой), нужно корректировать информацию дополнительного поля ведущей...... Что делать, как решить проблемку???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2001, 11:49 |
|
||
|
В одном триггере (Удалить+Обновить)
|
|||
|---|---|---|---|
|
#18+
Из триггера можешь работать с базовой таблицей, как хочешь, то есть, удалить, добавить или изменить данные... Проблема может быть только в случае, если подобные изменения каскадно вызывая триггера превысят общий допустимый уровень вложенности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2001, 13:57 |
|
||
|
В одном триггере (Удалить+Обновить)
|
|||
|---|---|---|---|
|
#18+
У меня получается такая ситуация (может слишком подробно, но по другому ни как не получится) я пишу триггер на обработку удаления записи из таблицы DOCUMENTS, т.е. если из таблицы удаляется какая-то строка, то мне необходимо удалить ссылки на связанные с ней строки из других таблиц (используются команды типа DELETE DOC_TREE FROM deleted, DOC_TREE WHERE deleted.DOC_ID=DOC_TREE.ID). Затем проверяю не является ли удаляемая запись "ведомой", т.е. нет ли в одном из дополнительных полей ссылки на ID "ведущей" записи. Если удаляемая строка "ведомая", то мне необходимо откорректировать дополнительное поле "ведущей" записи в этой же таблице - я пишу в этом же триггере (он объявлен как FOR DELETE) такую строку UPDATE DOCUMENTS SET DOCUMENTS.SP1="" WHERE DOCUMENTS.PV1=deleted.DOC_ID при выполнении проверки на синтаксис Enterprise Manager выдает сообщение типа - вы не можете в этом триггере использовать таблицу DOCUMENTS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2001, 08:57 |
|
||
|
В одном триггере (Удалить+Обновить)
|
|||
|---|---|---|---|
|
#18+
наверное вы очень волнуетесь и невнимательно пишите UPDATE DOCUMENTS SET SP1 ="" from DOCUMENTS s, deleted d WHERE s.PV1=d.DOC_ID ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2001, 10:30 |
|
||
|
В одном триггере (Удалить+Обновить)
|
|||
|---|---|---|---|
|
#18+
может и волнуюсь, но от этого проблемы не решаются..... ведь deleted это и есть DOCUMENTS Сейчас текст триггера выглядит так: CREATE TRIGGER DOCUMENTS_DTrig ON dbo.DOCUMENTS FOR DELETE AS DECLARE @ForLike varchar(100), @ForID int SET @ForLike = '' /* CASCADE DELETES TO 'DOC_PARAMS' */ DELETE DOC_PARAMS FROM deleted, DOC_PARAMS WHERE deleted.DOC_ID = DOC_PARAMS.DOC_ID /* CASCADE DELETES TO 'DOC_TREE' */ DELETE DOC_TREE FROM deleted, DOC_TREE WHERE deleted.DOC_ID = DOC_TREE.ID /*UPDATE TABLE*/ IF (left(deleted.DOC_PS1,4)='СФ №') and (deleted.DOC_PV1<>0) IF deleted.PFM_ID=1 BEGIN SET @ForLike = '%ПП №'+deleted.DOC_NO+'[[]'+cast(deleted.DOC_PV1 as varchar)+'];%' SET @ForID=floor(deleted.DOC_PV1) UPDATE DOCUMENTS SET DOC_PS1=replace(DOC_PS1,@ForLike,'') FROM DOCUMENTS s WHERE s.DOC_ID=@ForID END И Enterprise Manager выдает ошибку: The column prefix 'deleted' does not match with a table name or alias name used in the query. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2001, 12:26 |
|
||
|
В одном триггере (Удалить+Обновить)
|
|||
|---|---|---|---|
|
#18+
волнение достигло апогея сначала всё правильно, а с этого места чуть не так /*UPDATE TABLE*/ IF (( select left(DOC_PS1,4) from deleted) ='СФ №') and ( (select DOC_PV1 from deleted) <>0) IF (select PFM_ID from deleted)=1 BEGIN SELect @ForLike = '%ПП №'+DOC_NO+'[[]'+cast(DOC_PV1 as varchar)+'];%', @ForID=floor(DOC_PV1) from deleted а дальше опять нормально кстати: Вы в курсе, что это всё будет работать при условии что удаляется только одна запись? deleted - это таблица, а раз таблица, то чтобы читать её поля нужен обязательно FROM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2001, 13:23 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3571&tid=1826564]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 267ms |
| total: | 371ms |

| 0 / 0 |
