2 wenji643 wenji643 于 2015.05.29 11:35 提问

各位高手,请帮小妹解决一个数据库inserted表问题,在线等,谢谢

表ST_ZLZB_R,里面项目STCD站号,TM时间,DRP数据,许多站点会在同时或异时陆续向中心传输数据,如'31128010','2015-05-29 10:30:00.000','12'。其中有两个站点stcd为31128020和31128010,我的想让31128020或者是31128010这两个站来的数据drp这一项是大于24时drp会变为0再插入zlzb表里,例如:31128010站上传'31128010','2015-05-29 10:30:00.000','25',则表ST_ZLZB_R插入的这条数据会变为'31128010','2015-05-29 10:30:00.000','0'。我写了个触发器提示重复项不对,有大神能帮我看看改改吧,谢谢。
ALTER TRIGGER [dbo].[INSERT_RECORD1_31128020]
ON [dbo].[ST_ZLZB_R]
AFTER INSERT
AS
BEGIN
IF EXISTS(SELECT * FROM INSERTED WHERE ((STCD ='31128020') or(STCD ='31128010') )and ( DRP>24.5 ))
INSERT INTO ST_ZLZB_R SELECT '31128020',TM,0,INTV,PDR,DYP,WTH FROM INSERTED where STCD ='31128020'
INSERT INTO ST_ZLZB_R SELECT '31128010',TM,0,INTV,PDR,DYP,WTH FROM INSERTED where STCD ='31128010'
END
或者是能不能编一个触发器,当表ST_ZLZB_R进入的数据drp>24的时候相应的这条数据就不入表,也不耽误其他drp小于24的记录写入表ST_ZLZB_R,要是这样编的话要怎么写触发器?请老师帮我想想办法吧,现在脑子一团浆糊。

3个回答

gamefinity
gamefinity   Rxr 2015.05.29 13:57

你用的是AFTER INSERT,然后把原主键在插入一遍,肯定重复啊。

ALTER TRIGGER [dbo].[INSERT_RECORD1_31128020]
ON [dbo].[ST_ZLZB_R] 
INSTEAD OF INSERT
AS 
BEGIN
IF EXISTS(SELECT * FROM INSERTED WHERE ((STCD ='31128020') or(STCD ='31128010') )and ( DRP>24.5 ))
INSERT INTO ST_ZLZB_R 
SELECT '31128020',
TM,
CASE WHEN (STCD ='31128020') or (STCD = '31128010') )and ( DRP>24.5 ) THEN 0 ELSE DRP END,
INTV,
PDR,
DYP,
WTH 
  FROM INSERTED
END
qq_28398447
qq_28398447   2015.05.29 12:41

看一下,是不是违反唯一性约束了,“触发器提示重复项不对”
另外把操作过程与报错信息粘贴上来,大家才知道发生了什么。

testcs_dn
testcs_dn   Rxr 2015.05.29 13:30

BEGIN
IF EXISTS(SELECT * FROM INSERTED WHERE ((STCD ='31128020') or(STCD ='31128010') )and ( DRP>24.5 ))
INSERT INTO ST_ZLZB_R SELECT '31128020',TM,0,INTV,PDR,DYP,WTH FROM INSERTED where STCD ='31128020'
INSERT INTO ST_ZLZB_R SELECT '31128010',TM,0,INTV,PDR,DYP,WTH FROM INSERTED where STCD ='31128010'
END

这里(STCD ='31128020') or(STCD ='31128010') 用 or 肯定有可能出现重复的情况吧。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!