Автоматически обновлять поле в таблице SQL Server через 15 секунд после вставки - PullRequest
0 голосов
/ 09 февраля 2012

У меня немного странная ситуация, и я пытаюсь заполнить поле в таблице.Я должен также упомянуть, что я довольно новичок в SQL Server.

Что используется : я работаю в базе данных SQL Server 2008.Существует две таблицы проблем: PO_APPROVAL_LOG и PO_HDR.

Процесс , который выполняется здесь, - это создание нового заказа на покупку.В некоторых случаях требуется утверждение менеджера для создания заказа на поставку.Я использую winform (C #), которая аутентифицирует менеджера в Active Directory, если менеджер является членом определенной группы, PO одобрен.

Моя ситуация : существуетИспользуется стороннее приложение, и я пишу некоторый проверочный код (упомянутый выше), который выполняется до того, как в приложении может произойти событие сохранения.Если определенные критерии удовлетворены, мой код проверки возвращается обратно TRUE и позволяет приложению продолжить сохранение.Когда начинается сохранение, в него вставляются несколько таблиц в базе данных, включая PO_HDR.Я не могу изменить порядок, в котором происходят события, я могу только написать эти правила проверки.Приложение не будет работать до тех пор, пока оно не получит обратно определенный объект из моего кода, для свойства SUCCESS которого установлено значение TRUE или FALSE.

Проблема У меня возникла проблемасвязано с регистрацией одобрения заказа на поставку в таблице PO_APPROVAL_LOG.Прямо сейчас, таблица PO_APPROVAL_LOG вставляется, когда менеджер отправляет свои учетные данные.Это происходит до заполнения PO_HDR.Мне нужно включить PO_HDR.PO_NUMBER, чтобы сделать это, мне нужно подождать, пока заполнится PO_HDR, получить значение PO_NUMBER и обновить соответствующую запись PO_APPROVAL_LOG.Очень немногие PO действительно нуждаются в утверждении, таблица PO_APPROVAL_LOG не должна видеть много действий.

Я не могу создать триггер на таблице PO_HDR.

Ради экспериментовЯ играл с созданием триггера AFTER INSERT на PO_APPROVA_LOG, который использовал waitfor delay, чтобы посмотреть, смогу ли я получить PO_NUMBER после того, как PO_HDR имел шанс заполниться.(Да, я знаю, что waitfor delay в триггере - это ужасная идея, это просто эксперимент с базой данных игры).Это не сработало, так как приложение не получило ответ от моего кода проверки TRUE, пока не завершилось вставка и последующее выполнение триггера.

Мой вопрос : не удалосьРабота агента SQL будет возможным решением?Это нужно будет запускать каждую минуту или две.Одна из моих проблем заключается в том, не обременительно ли это для базы данных?Если задание выполнено и определено, следует ли вызывать процедуру для обновления таблицы журнала (найдено одно или несколько значений NULL PO_NUMBER в PO_APPROVAL_LOG), возможно, это может сработать.

Любой другой совет?Некоторое время это доставляло мне неприятности.

Если что-то из этого неясно, пожалуйста, спросите!Спасибо!

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Нет никакого способа сделать это в SQL, попробуйте выполнить это из своего кода.

0 голосов
/ 10 февраля 2012

Это будет немного округлено и может не соответствовать вашей точной настройке ...

Когда вы собираете данные из таблицы PO_APPROVAL_LOG, делайте это с помощью представления или хранимой процедуры, которая присоединяется кстол к PO_HDR.Проверьте, обновлен ли PO_HDR, - если нет, не возвращайте строку PO_APPROVAL_LOG.

При такой настройке вы фактически никогда не обновите таблицу PO_APPROVAL_LOG.(бонус, ИМО)

...