我之前曾做过一个话题,但我认为我并不清楚,我将尽我所能尽可能详细地解释它。
我有一个名为List的表,该表有32000行,每年(2000-1999)为2000(行),其中包括:SongID,Top2000Year,Position,
发生了什么:
如果某人删除了例如2000年,则2000年中的所有2000首歌曲都将被删除,那没有问题
Delete from List WHERE top2000Year = 2000
但是,我面临的问题是:我需要对此进行记录,我创建了一个名为LogTable的日志表,其列为:Title,Artist,Year,Position Title将是歌曲标题,year是歌曲发行年份, position是列表中的位置
这些来自不同的表,我像这样加入他们
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
只需trigger
在您的表上创建一个delete
动作即可:
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
虚拟表才能获取所有已删除的行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句