在 table sql 服务器中删除的记录行
Logging rows that are deleted in a table sql server
我之前做过一个话题,但是我觉得我没有说清楚,我会尽可能详细地解释它。
我有一个名为 List 的 table,它有 32000 行,每年 2000 行(1999-2014),其中有列:SongID,Top2000Year,Position,
必须发生的事情:
如果有人删除例如2000年,2000年的所有2000首歌曲都会被删除,没有问题
Delete from List WHERE top2000Year = 2000
但是,我面临的问题是:我需要将其记录下来,我创建了一个名为 LogTable 的日志 table,其中包含以下列:标题、艺术家、年份、职位
标题将是歌曲名称,年份是歌曲发行的年份,位置是列表中的位置
他们来自不同的table,我这样加入他们
select title, name[artist],song.Year[SongYear], position from List
left join Song on Song.songid = List.songid
left join Artist on Artist.artistid = Song.artistid
where top2000Year = 2013
order by position asc
这显示了这样的查询http://puu.sh/i8f2u/8702ee7010.png(审查了服务器,这是我的老师,所以我想我会审查它)
我正在尝试完全像那样填充我的 LogTable,如果 2013 年被删除,那 2000 行应该插入到 LogTable 使用触发器
编辑:
我使用了这个 https://dbalink.wordpress.com/2008/06/20/how-to-sql-server-trigger-101/ 并且它起作用了,然后我用我的数据库尝试了它,但它没有起作用。
代码:
USE [TOP2000DATABASE]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[TRGDeleteList]
ON list
FOR DELETE
AS
INSERT INTO List (songid,top2000Year,position)
SELECT songid,top2000Year,position FROM Inserted
INSERT INTO [dbo].[LogTabel] (title,artist,Year,position)
SELECT title,artist,year,position FROM Deleted
只需在您的 table 上为 delete
操作创建一个 trigger
:
CREATE TRIGGER TriggerName
ON List
FOR DELETE
AS
INSERT INTO LogTable (Title, Artist, Year, Position)
SELECT s.Title, a.Name, s.Year, s.Position
FROM DELETED d
LEFT JOIN Song s ON s.songid = d.songid
LEFT JOIN Artist a ON a.artistid = s.artistid
GO
您需要加入 DELETED
虚拟 table 才能获取所有已删除的行。
我之前做过一个话题,但是我觉得我没有说清楚,我会尽可能详细地解释它。
我有一个名为 List 的 table,它有 32000 行,每年 2000 行(1999-2014),其中有列:SongID,Top2000Year,Position,
必须发生的事情:
如果有人删除例如2000年,2000年的所有2000首歌曲都会被删除,没有问题
Delete from List WHERE top2000Year = 2000
但是,我面临的问题是:我需要将其记录下来,我创建了一个名为 LogTable 的日志 table,其中包含以下列:标题、艺术家、年份、职位 标题将是歌曲名称,年份是歌曲发行的年份,位置是列表中的位置
他们来自不同的table,我这样加入他们
select title, name[artist],song.Year[SongYear], position from List
left join Song on Song.songid = List.songid
left join Artist on Artist.artistid = Song.artistid
where top2000Year = 2013
order by position asc
这显示了这样的查询http://puu.sh/i8f2u/8702ee7010.png(审查了服务器,这是我的老师,所以我想我会审查它)
我正在尝试完全像那样填充我的 LogTable,如果 2013 年被删除,那 2000 行应该插入到 LogTable 使用触发器
编辑: 我使用了这个 https://dbalink.wordpress.com/2008/06/20/how-to-sql-server-trigger-101/ 并且它起作用了,然后我用我的数据库尝试了它,但它没有起作用。
代码:
USE [TOP2000DATABASE]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[TRGDeleteList]
ON list
FOR DELETE
AS
INSERT INTO List (songid,top2000Year,position)
SELECT songid,top2000Year,position FROM Inserted
INSERT INTO [dbo].[LogTabel] (title,artist,Year,position)
SELECT title,artist,year,position FROM Deleted
只需在您的 table 上为 delete
操作创建一个 trigger
:
CREATE TRIGGER TriggerName
ON List
FOR DELETE
AS
INSERT INTO LogTable (Title, Artist, Year, Position)
SELECT s.Title, a.Name, s.Year, s.Position
FROM DELETED d
LEFT JOIN Song s ON s.songid = d.songid
LEFT JOIN Artist a ON a.artistid = s.artistid
GO
您需要加入 DELETED
虚拟 table 才能获取所有已删除的行。