получать обновленные данные из вставленных и удаленных - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть физические таблицы для хранения идентификаторов, а также время вставленных, удаленных, обновленных данных и мои триггеры прикреплены (после вставки, обновления и удаления) с базовой таблицей. Это своего рода отслеживание.

Вставленные записи и удаленные записи - это нормально, но проблема в том, что я не получаю никаких записей в базовой таблице для обновленных записей !! записи, которые вставлены и удалены как.

Помогите мне, если я что-то упустил здесь.

Триггер для операции вставки и обновления:

CREATE TRIGGER [dbo].[trArticleAttachmentTrack]
   ON  [dbo].[ArticleAttachment]
   AFTER INSERT, UPDATE
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    SET NOCOUNT ON;

    INSERT INTO TrackArticleAttachmentTbl (ArticleAttachmentID, ActionOn)
    SELECT i.ArticleAttachmentID, GETDATE() FROM inserted i

END

GO

Триггер для операции удаления:

CREATE TRIGGER [dbo].[trArticleAttachmentTrackDelete]
   ON  [dbo].[ArticleAttachment]
   AFTER DELETE
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    SET NOCOUNT ON;

    INSERT INTO TrackArticleAttachmentTblRowDel (ArticleAttachmentID, ActionOn)
    SELECT i.ArticleAttachmentID, GETDATE() FROM deleted i

END

GO

Запрос на получение вывода

SELECT 
  CASE WHEN i.ArticleAttachmentID IS NULL THEN 'This is a delete' 
       WHEN  d.ArticleAttachmentID IS NULL THEN 'This is an insert' 
                                        ELSE 'This is an update' 
  END  as Action, 
  * 
FROM 
  TrackArticleAttachmentTbl i
FULL OUTER JOIN 
  TrackArticleAttachmentTblRowDel d
    ON i.ArticleAttachmentID = d.ArticleAttachmentID

ВЫВОД:

This is an update   38  18226   2012-02-19 14:01:52 5   18226   2012-02-19 14:02:01
This is an update   22  18210   2012-02-15 16:38:39 4   18210   2012-02-15 16:39:29
This is an update   13  18201   2012-02-15 12:21:22 2   18201   2012-02-15 12:21:32
This is an update   47  18235   2012-02-19 16:37:54 6   18235   2012-02-19 17:09:53

Запрос на получение обновленных записей

SELECT *
FROM dbo.ArticleAttachment 
WHERE ArticleAttachmentID IN (18226,18210,18201,18235)

для этого нет результата: (

1 Ответ

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

Выражение CASE неправильно определяет удаление. Попробуйте вместо этого.

  CASE WHEN d.ArticleAttachmentID IS NOT NULL
       THEN 'This is a delete' 
       ELSE 'This is an insert or update' 
  END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...