powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Trigger update/delete/insert mssql
3 сообщений из 3, страница 1 из 1
Trigger update/delete/insert mssql
    #39770743
Kotovach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Create a new table Production.ProductsHistory that will be used to store the history of changes in Production.Products. The history table should include the following columns: ID (primary key, identity); Action (varchar, will contain an action type Insert, Update or Delete); ModifiedDate (datetime); productid (the productid value from original Production.Products table); UserName (the name of user who applied changes). Create other columns if you think they are reasonable.
Create a trigger for the INSERT, UPDATE and DELETE operations for the Production.Products table to save history of changes to the Production.ProductsHistory table.
Try to insert, update or delete rows in the Production.Products. Verify the Production.ProductsHistory was populated. Try to affect several records in one operation (for example update 5 records in one UPDATE statement and verify all 5 records were added to the history).

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
CREATE TABLE TestSQL.Production.ProductsHistory
(
    Id INT IDENTITY PRIMARY KEY,
    ProductId INT NOT NULL,
    [Action]  VARCHAR(6) NOT NULL,
    ModifiedDate DATETIME NOT NULL DEFAULT GETDATE(),
	UserName NCHAR(60) NOT NULL DEFAULT SYSTEM_USER
);


CREATE TRIGGER trg_Products_IUD
ON TestSQL.Production.Products
AFTER INSERT, UPDATE, DELETE
AS BEGIN

DECLARE  @ProductId INT

---- Get data from inserted/ updated
		   SELECT @ProductId=ProductId        
           FROM inserted

 ---- Get data from deleted
              SELECT @ProductId=ProductId
              FROM deleted

  -- Insert Case
   IF EXISTS( SELECT * FROM inserted) AND NOT EXISTS (SELECT * FROM deleted) 
    BEGIN
             INSERT INTO TestSQL.Production.ProductsHistory (ProductId, [Action])
              Values( @ProductId, 'Insert')
    END
    
    -- Update Case
   IF EXISTS( SELECT * FROM inserted) AND EXISTS (SELECT * FROM deleted)
    BEGIN
             INSERT INTO TestSQL.Production.ProductsHistory (ProductId, [Action])
              Values( @ProductId, 'Update')
    END
      
       -- Delete Case
       IF EXISTS( SELECT * FROM deleted) AND NOT EXISTS (SELECT * FROM inserted)
       BEGIN
            
         INSERT INTO TestSQL.Production.ProductsHistory (ProductId, [Action])
              Values( @ProductId, 'Delete')

       END
END




Мой триггер пишет только первую изменяемую/удаляемую/вставляемую строку если это группа строк

INSERT INTO TestSQL.Production.Products (productname, supplierid, categoryid, unitprice, discontinued)
Values('Product AAAAA', 1, 5, 13.0000, 1),
('Product AAAAA', 1, 5, 15.0000, 1),
('Product AAAAA', 1, 5, 14.0000, 1),
('Product AAAAA', 1, 5, 16.0000, 1)


с одиночными работает отлично


подкажите, пожалуйста, как в history писать все изменения?
...
Рейтинг: 0 / 0
Trigger update/delete/insert mssql
    #39770744
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
             INSERT INTO TestSQL.Production.ProductsHistory (ProductId, [Action])
              select ProductId, 'Insert' from inserted



Далее самостоятельно.
...
Рейтинг: 0 / 0
Trigger update/delete/insert mssql
    #39770748
Kotovach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич,

тоооочно)))
Спасибо! низкий поклон! =)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Trigger update/delete/insert mssql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]