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

一个解发器有关问题

2012-06-21 
一个解发器问题SQL codeCREATE TRIGGER TR_INSERTMPURTD05 ON [dbo].[PURTD] FOR INSERTASDECLARE@TD001 C

一个解发器问题

SQL code
CREATE TRIGGER TR_INSERTMPURTD05 ON [dbo].[PURTD] FOR INSERTASDECLARE     @TD001 CHAR(4),    @TD002 CHAR(11),                    @TD003 CHAR(4),                    @TD004 CHAR(20),            @TC004 CHAR(10),            @SL NUMERIC(16,6)                                 BEGIN TRANSACTIONSET NOCOUNT ONSELECT @TD001=TD001,@TD002=TD002,@TD004=TD004,@TD003=TD003 FROM INSERTEDSELECT @SL=SUM(TD008)-TD015 FROM PURTD WHERE TD004=@TD004 AND TD016='N' UPDATE PURTD SET UDF56=@SL WHERE TD001=@TD001 AND TD002=@TD002 AND TD003=@TD003SET NOCOUNT OFFCOMMIT TRANSACTION 

SQL code
消息 8120,级别 16,状态 1,过程 TR_INSERTMPURTD05,第 16 行选择列表中的列 'PURTD.TD015' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

请问各位大大这应该怎么改

[解决办法]
SELECT @SL=SUM(TD008)-sum(TD015) FROM PURTD WHERE TD004=@TD004 AND TD016='N' 


[解决办法]
改用存储过程吧!触发器后期极难维护!
[解决办法]
SQL code
CREATE TRIGGER TR_INSERTMPURTD05 ON [dbo].[PURTD] FOR INSERTASDECLARE     @TD001 CHAR(4),    @TD002 CHAR(11),                    @TD003 CHAR(4),                    @TD004 CHAR(20),            @TC004 CHAR(10),            @SL NUMERIC(16,6)                                 BEGIN TRANSACTIONSET NOCOUNT ONSELECT @TD001=TD001,@TD002=TD002,@TD004=TD004,@TD003=TD003 FROM INSERTEDSELECT @SL=SUM(TD008)-TD015 FROM PURTD WHERE TD004=@TD004 AND TD016='N' --这句话有错/*如果楼主一定要这么写,那就得在后面出现group by TD015*/UPDATE PURTD SET UDF56=@SL WHERE TD001=@TD001 AND TD002=@TD002 AND TD003=@TD003SET NOCOUNT OFFCOMMIT TRANSACTION
[解决办法]
用1楼或3楼的方法,程序可以运行,但结果不同,另外,没有考虑到可以一次插入多条记录的情况,inserted表可以有多行的情形.
[解决办法]
sum需要GROUP BY语句

热点排行
Bad Request.