一个看似简单的问题,可是1个多小时了也没调出来,请各位帮忙

plutu 2007-02-28 04:42:49
现在有表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’的记录了,请问用触发器怎么实现?谢谢!!
...全文
299 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
paoluo 2007-03-01
  • 打赏
  • 举报
回复
那就這樣,改寫下觸發器

--建立測試環境
CREATE TABLE [dbo].[tab] (
[riqi] [datetime] ,
[yangpinhao] [char] (6) ,
[flag] [char] (1) default 'Y',
[panding] [char] (6) )
GO
--建立觸發器
Create Trigger TR_Tab
On Tab
After Insert
As
Update A Set flag = 'N' From Tab A Where Exists (Select yangpinhao From Tab Where yangpinhao = A.yangpinhao And riqi < A.riqi)
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 不合格
*/


plutu 2007-02-28
  • 打赏
  • 举报
回复
paoluo(一天到晚游泳的鱼) 的思路是重新插入,但是字段多的时候不是很方便,但jacobsan(梅)的调试不正确,请再按照jacobsan(梅)的思路给出个正确的,谢谢
paoluo 2007-02-28
  • 打赏
  • 举报
回复
--建立測試環境
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 不合格
*/
jacobsan 2007-02-28
  • 打赏
  • 举报
回复
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
plutu 2007-02-28
  • 打赏
  • 举报
回复
是tab表,刚从写错了,对不起啊

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧