SQL - 作为更新日志触发
SQL - trigger as log of update
我的表是:
-冲锋队
-小队
-排
Stormtrooper 将 'ID' 作为主键,将 'squadID' 作为外键,小队将 'ID' 作为主键,将 'platoonID' 作为外键,排将 'ID'作为主键。
我想使用触发器显示所有连接到我更新的 stormtrooper 的内容。
CREATE TRIGGER log AFTER UPDATE ON stormtrooper
但我不知道如何在一个触发器中显示包含该冲锋队的冲锋队、小队和排的数据。
在接下来的步骤中,我将针对您的问题向您展示一个示例。
因此,让我们创建基本 tables.
的示例
CREATE TABLE PLATOON (
id int identity(1,1) primary key,
name nvarchar(20)
);
CREATE TABLE SQUAD (
id int identity(1,1) primary key,
name nvarchar(20),
platoonId int,
constraint fk_platoon foreign key(platoonId) references PLATOON(id)
);
CREATE TABLE STORMTROOPER (
id int identity(1,1) primary key,
rank nvarchar(20),
squadId int,
constraint fk_squad foreign key(squadId) references SQUAD(id)
);
您应该创建一个 table 以使用触发器来记录更新。所以让我们创建 table.
CREATE TABLE LOG_TABLE
(
id int identity(1,1) primary key,
logText nvarchar(200)
);
现在为 table STORMTROOPER 的条目更新后创建一个触发器。
CREATE TRIGGER log ON STORMTROOPER
AFTER UPDATE
AS
BEGIN
INSERT INTO LOG_TABLE
select 'updated stormstrooper ' + cast(d.id as nvarchar) + ' in ' + SQUAD.[name] + ' of ' + PLATOON.[name] + ' from rank ' + d.[rank] + ' to ' + i.[rank]
from deleted d
inner join inserted i on (i.ID = d.ID)
inner join SQUAD on SQUAD.[id] = i.[squadId]
inner join PLATOON on PLATOON.[id] = SQUAD.[platoonId]
END
这是记录更新的示例。 MS SQL 有 2 个 table 用于 insert/update/delete。插入使用 Inserted,删除使用 Deleted。更新条目首先被标记为已删除,然后插入(使用新值)到已插入。因此,您可以比较 Inserted 和 Deleted 的值以获得您的更改。
您可以根据自己的具体要求创建更多用例。
要阅读日志,您只需 SELECT * FROM LOG_TABLE
。
您可以在 http://sqlfiddle.com/#!3/c926cd/1.
处找到包含一些数据的示例
希望对您有所帮助。
我的表是:
-冲锋队
-小队
-排
Stormtrooper 将 'ID' 作为主键,将 'squadID' 作为外键,小队将 'ID' 作为主键,将 'platoonID' 作为外键,排将 'ID'作为主键。
我想使用触发器显示所有连接到我更新的 stormtrooper 的内容。
CREATE TRIGGER log AFTER UPDATE ON stormtrooper
但我不知道如何在一个触发器中显示包含该冲锋队的冲锋队、小队和排的数据。
在接下来的步骤中,我将针对您的问题向您展示一个示例。 因此,让我们创建基本 tables.
的示例CREATE TABLE PLATOON (
id int identity(1,1) primary key,
name nvarchar(20)
);
CREATE TABLE SQUAD (
id int identity(1,1) primary key,
name nvarchar(20),
platoonId int,
constraint fk_platoon foreign key(platoonId) references PLATOON(id)
);
CREATE TABLE STORMTROOPER (
id int identity(1,1) primary key,
rank nvarchar(20),
squadId int,
constraint fk_squad foreign key(squadId) references SQUAD(id)
);
您应该创建一个 table 以使用触发器来记录更新。所以让我们创建 table.
CREATE TABLE LOG_TABLE
(
id int identity(1,1) primary key,
logText nvarchar(200)
);
现在为 table STORMTROOPER 的条目更新后创建一个触发器。
CREATE TRIGGER log ON STORMTROOPER
AFTER UPDATE
AS
BEGIN
INSERT INTO LOG_TABLE
select 'updated stormstrooper ' + cast(d.id as nvarchar) + ' in ' + SQUAD.[name] + ' of ' + PLATOON.[name] + ' from rank ' + d.[rank] + ' to ' + i.[rank]
from deleted d
inner join inserted i on (i.ID = d.ID)
inner join SQUAD on SQUAD.[id] = i.[squadId]
inner join PLATOON on PLATOON.[id] = SQUAD.[platoonId]
END
这是记录更新的示例。 MS SQL 有 2 个 table 用于 insert/update/delete。插入使用 Inserted,删除使用 Deleted。更新条目首先被标记为已删除,然后插入(使用新值)到已插入。因此,您可以比较 Inserted 和 Deleted 的值以获得您的更改。 您可以根据自己的具体要求创建更多用例。
要阅读日志,您只需 SELECT * FROM LOG_TABLE
。
您可以在 http://sqlfiddle.com/#!3/c926cd/1.
希望对您有所帮助。