2014-10-05 1 views
1

Итак, у меня есть две таблицы: User и LogUser. Когда я обновляю таблицу User, старые данные должны храниться в истории в таблице LogUser.Как создать процедуру для отслеживания последних измененных данных

Я создал процедуру обновления, но не знаю, как сохранить историю измененных данных.

Процедура обновления:

CREATE PROCEDURE dbo.UpdateUser 
(
@UserID int, 
@Name nvarchar(40), 
@Address nvarchar(60), 
@City nvarchar(15), 
) 
AS 
SET NOCOUNT OFF; 
UPDATE [dbo].[User] SET [UserID] = @UserID, [Name] = @Name, [Address] = @Address, [City] = @City,WHERE (([UserID] = @UserID)); 

ПРОЦЕДУРА:

CREATE PROCEDURE dbo.UpdateUser 
(
@UserID int, 
@Name nvarchar(40), 
@Address nvarchar(60), 
@City nvarchar(15) 
) 

AS 

BEGIN 

INSERT INTO 
    dbo.LogUser (UserID, Name, Address, City) 
SELECT 
    UserID, Name, Address, City 
FROM 
    dbo.User 
WHERE 
    UserID = @UserID; 

UPDATE 
     dbo.User 
    SET 
     UserID = @UserID, 
     Name = @Name, 
     Address = @Address, 
     City = @City 
    WHERE 
     UserID = @UserID; 

END 

ответ

2

Как насчет вставки данных в таблицу LogUser, прежде чем обновить?

-- Step 1: Add user history into LogUser table 
INSERT INTO 
    dbo.LogUser (UserID, Name, Address, City) 
SELECT 
    UserID, Name, Address, City 
FROM 
    dbo.User 
WHERE 
    UserID = @UserID; 

-- Step 2: Update the user in the User table 
UPDATE 
    dbo.User 
SET 
    Name = @Name, 
    Address = @Address, 
    City = @City 
WHERE 
    UserID = @UserID; 
+0

Спасибо, это то, что мне нужно. Итак, моя процедура должна выглядеть так? .. редактируемый вопрос. – McKeymayker

+1

Да. Я сделал одно изменение кода выше: я удалил «SET UserID = @UserID», поскольку это было излишним. –

0
  1. Создать dbo.LogUser

    создать таблицу dbo.LogUser (
    действие VARCHAR (3),
    changedAt DateTime,
    USERID NCHAR (5), - почему бы не ИНТ
    Наименование nvarchar (40),
    Адрес nvarchar (60),
    Город nvarchar (15))

  2. Использование триггера на dbo.User

    создать триггер dbo.User_UPD на dbo.User
    для обновления, удаления
    , как начать
    вставки dbo.LogUser
    выберите случай, когда i.UserID равна нулю затем еще конец 'UPD' 'Del',
    GETDATE(),
    d.UserID,
    d.Name,
    d.Address,
    d.City
    из удаляемого d
    LEFT JOIN вставленный я на i.UserID = d.UserID
    конец

  3. Update dbo.Users, как Вы хотите.

    Update dbo.Users Set Name = 'Joe'

+0

Спасибо за ответ, userId is int, я понял это неправильно в вопросе. – McKeymayker

Смежные вопросы