首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问:使用触发器检查新insert插入数据

2013-09-05 
请教:使用触发器检查新insert插入数据现在有一张表,结构如下:CREATE TABLE [dbo].[tab]([id] [int] IDENTI

请教:使用触发器检查新insert插入数据
现在有一张表,结构如下:

CREATE TABLE [dbo].[tab](
[id] [int] IDENTITY(1,1) NOT NULL,
[title] [nvarchar](50) NULL,
[name] [nvarchar](20) NULL,
[time] [datetime] NULL
) ON [PRIMARY]


往这个表里插入数据的程序分散在很多地方。
为了阻止重复的数据插入,准备写一个触发器。
期望是,在插入数据时,检查最新的100条数据里、有多少条重复记录(按title,name两个字段检查重复);如果重复记录超过3条,就不再插入数据。


请问这个触发器怎么写?
谢谢! 触发器
[解决办法]
1、为了阻止重复的数据插入————建议设计表的时候建立主键或唯一索引
2、if exists(select 1 from inserted group by title,[name] having count(title)>3)
   ......


[解决办法]

CREATE TABLE [dbo].[tab](
[id] [int] IDENTITY(1,1) NOT NULL,
[title] [nvarchar](50) NULL,
[name] [nvarchar](20) NULL,
[time] [datetime] NULL
) ON [PRIMARY]
GO

CREATE TRIGGER tr_instead ON dbo.tab
INSTEAD OF INSERT
as
begin
--在插入数据时,检查最新的100条数据里、有多少条重复记录(按title,name两个字段检查重复);如果重复记录超过3条,就不再插入数据。
SELECT * FROM INSERTED

INSERT INTO tab(title, name, [time])
SELECT I.[title],I.[name], GETDATE()
FROM INSERTED I
left JOIN
(
SELECT TOP(100) title, name FROM tab WITH(NOLOCK) ORDER BY [time] DESC
) T
ON i.title = i.title
AND I.NAME = T.NAME
GROUP BY i.title, i.name      
HAVING COUNT(t.title) < 3
END

GO

INSERT INTO [tab](TITLE,NAME, TIME)
SELECT '1', '1', GETDATE()--插入3次后,将插入不进去

/*
idtitlenametime
1112013-08-20 16:51:20.387
2112013-08-20 16:51:25.150
3112013-08-20 16:51:34.037
*/

热点排行