在 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 才能获取所有已删除的行。