不知道我下面这样写对不对,
CREATE TRIGGER ANSAICOPTH01 ON [dbo].[COPTH]
FOR INSERT,update
AS
beigin
if (select count(*) from inserted where th020 ='Y' or th020 = 'N')=0
UPDATE COPTH SET COPTH.UDF51=TH202,COPTH.TH025=(TH035+TH036)/((TH008+TH024)*TH012)
FROM inserted
else end
CREATE TRIGGER ANSAICOPTH01 ON [dbo].[COPTH]
FOR INSERT,update
AS
beigin
if (select count(*) from inserted where th020 ='Y' or th020 = 'N')=0
UPDATE COPTH SET COPTH.UDF51=TH202,COPTH.TH025=(TH035+TH036)/((TH008+TH024)*TH012)
FROM inserted
else end
解决方案 »
- 这个界面是用什么开发工具可以完成;查询时把sql server表里的0和null显示为空白
- SQL Manager 2005 for SQL Sever 新手入门
- INNER REMOTE JOIN问题
- 关于image 字体贴类型出现的怪问题...
- 关于程序调用存储过程超时的问题。
- 一个sqlserver2005 链接问题,高手请进,有经验者请进!
- 这个游标怎么不能用,有什么问题?
- 请问在SQL Sever里有没有生成器的概念?
- 关于异构数据库的问题,急,在线等待……
- OLE DB 访问接口 'MSDASQL' 返回的数据与列 '[MSDASQL].psex' 所需的数据长度不匹配
- 自增列sql 2000和2005的区别!
- SQL SERVER数据查复去重统计问题
FOR INSERT,update
AS
if not exist (select 1 from inserted where th020 ='Y' or th020 = 'N')
beigin
UPDATE COPTH SET COPTH.UDF51=TH202,COPTH.TH025=(TH035+TH036)/((TH008+TH024)*TH012)
FROM inserted
end
else
begin
end
FOR INSERT,update
AS
if exist (select 1 from inserted where th020 ='Y' or th020 = 'N') UPDATE COPTH SET COPTH.UDF51=TH202,COPTH.TH025=(TH035+TH036)/((TH008+TH024)*TH012)
FROM inserted
是有th020 ='Y' or th020 = 'N'这种全部不更新,还是只这部分不更新
FOR INSERT,update
AS
if exist (select 1 from inserted where th020 ='Y' or th020 = 'N') UPDATE COPTH SET COPTH.UDF51=TH202,COPTH.TH025=(TH035+TH036)/((TH008+TH024)*TH012)
FROM inserted
一、INSERTED 的插入动作都还没有完成,就想去UPDATE?真是天上会掉钱下来啊,
建议楼猪分开写,一个INSTEAD OF INSERT ,一个FOR UPDATE,
二、一条记录刚INSERTED进去就要进行UPDATE,我也是觉得这是很好笑的?先在前台程序里就搞好,好不好啊?
三、我发表上述言论是因为我看到你的TRIGGER写的是ON COPTH 然后又UPDATE COPTH,如果你认为我说错了的话,你就先去看看书吧。
我的说话完了,一共四点。希望同仁们把我的回贴顶得比楼主的还要高。
FOR INSERT,update
AS
if exist (select 1 from inserted where th020 ='Y' or th020 = 'N')
UPDATE COPTH SET COPTH.UDF51=TH202,COPTH.TH025=(TH035+TH036)/((TH008+TH024)*TH012)
FROM inserted
这些语句你们自己有没有用过啊?不用INSERTED OF INSERT,你们认识能执行吗?书上教你们的,老师教你们的,都放到哪儿去了呢?INSERTED的动作是一直要等你的触发器先完成动作,才会去执行的吧?大爷们?我心痛啊,不过我刚开始学的时候也是这样写的,但是我现在改了。一般不用触发器更改本表数据,要更改,直接用UPDATE就行了,用个触发器,跟鸟一样的。FOR UPDATE,你这个UPDATE动作一次性完成不就处了吗?非搞个触发器来玩,真是她妈好玩呀!!!!!这是事后发表的,同仁们可以不顶。
因为程序是以前写好的,没有办法修改(要很多钱的)
这个是神舟数码易飞erp的销货单的明细表,有些字段是我们后来添加进去的
主键是th001,th002
当我们添加数据时,因为有些后来添加的字段没有数据,必须要写触发器,才能更新啊,
为了减少触发器更新数据库的频率,只有当要insert,update记录的字段th020='Y' or 'N'时,
才会触发啊,不然现在几个人同时操作时,服务器跑不动啊,
审计一个单要20分钟,因为每插入一条记录,就要更新全表啊。
当然现在我修改成一下这样子,就没有什么影响了CREATE TRIGGER ANSAICOPTH01 ON [dbo].[COPTH]
FOR INSERT,update
AS
if exist (select 1 from inserted where th020 ='Y' or th020 = 'N')
begin
UPDATE COPTH SET COPTH.UDF51=TH202,COPTH.TH025=(TH035+TH036)/((TH008+TH024)*TH012)
FROM COPTH,inserted i where copth.th001 = i.th001 and copth.th002 = i.th002
end