日期:2014-05-18  浏览次数:20562 次

一个看似简单的问题,可是1个多小时了也没调出来,请各位帮忙
现在有表tab1,里边是产品检验记录,有初检和复检的情况,也就是说同一个样品号有可能检验两次,有一个初检标记字段flag,是为了统计需要而增加的,默认的情况是 'Y ',也就是都为初检记录,但如果同一个样品号有初检记录时,新增加的同一个样品号的记录的flag就要设为 'N ',我想用触发器实现
简化后的表结构及数据如下:
CREATE   TABLE   [dbo].[tab]   (
[riqi]   [datetime]   ,
[yangpinhao]   [char]   (6)   ,
[flag]   [char]   (1)   default   'Y ',
[panding]   [char]   (6)   )  

insert       into       tab  
                              select     '2007-02-01   10:45:20 ', '001 ', 'Y ', '合格 '          
    union     all       select       '2007-02-01   10:48:20 ', '002 ', 'Y ',   '不合格 '
    union     all       select       '2007-02-01   10:55:20 ', '002 ', 'N ',   '合格 '
    union     all       select       '2007-02-01   11:25:20 ', '003 ', 'Y ',   '不合格 '

现在我想对增加一个编号是‘003’的记录,因为原来表中已经有一个编号是‘003’的记录了,因此想在增加后将该条记录的flag自动修改为 'N ',因为原来表中有一个编号是‘003’的记录了,请问用触发器怎么实现?谢谢!!

------解决方案--------------------
CREATE TRIGGER TRIGGER_tab ON tab
FOR INSERT
AS
if exists(select * from inserted i,tab where i.yangpinhao=tab.yangpinhao)
update tab set flag= 'N ' from inserted i,tab where i.yangpinhao=tab.yangpinhao and i.riqi=tab.riqi
------解决方案--------------------
--建立測試環境
CREATE TABLE [dbo].[tab] (
[riqi] [datetime] ,
[yangpinhao] [char] (6) ,
[flag] [char] (1) default 'Y ',
[panding] [char] (6) )
GO
--建立觸發器
Create Trigger TR_Tab
On Tab
Instead Of Insert
As
Insert tab
Select
riqi, yangpinhao,
flag = (Case When Exists(Select yangpinhao From Tab Where yangpinhao = A.yangpinhao) Then 'N ' Else Flag End),
panding
From Inserted A
GO
--插入數據
insert into tab select '2007-02-01 10:45:20 ', '001 ', 'Y ', '合格 '
union all select '2007-02-01 10:48:20 ', '002 ', 'Y ', '不合格 '
union all select '2007-02-01 10:55:20 ', '002 ', 'N ', '合格 '
union all select '2007-02-01 11:25:20 ', '003 ', 'Y ', '不合格 '
GO
--測試
insert into tab
select '2007-02-01 11:35:20 ', '003 ', 'Y ', '不合格 '

Select * From tab
GO
--刪除測試環境
Drop Table Tab
--結果
/*
riqi yangpinhao flag panding
2007-02-01 10:45:20.000 001 Y 合格
2007-02-01 10:48:20.000 002 Y 不合格
2007-02-01 10:55:20.000 002 N 合格
2007-02-01 11:25:20.000 003 Y 不合格
2007-02-01 11:35:20.000 003 N 不合格
*/