求助帖,折磨人的触发器!

dreamdoner 2015-01-09 12:05:45
两个表,其中table1 中的A列为主键,在table2中C+D列为主键,C列与A列关联。
一个触发器,需要实现功能:新增table2时,当E字段在(-1,3)区间范围内时,判断为Y,否则为N。并且在C列值相同的情况下,不管有多少笔序号(即多笔数据),只要其中有一个判断为N,and table1.A=table2.C,那么返回N到table1的B列对应字段中,否则返回Y。

table1
A(KEY) B
10 Y
20 Y
30 N


table2
C D(序号) E 判断
10 01 -1 Y
10 02 0 Y
20 01 3 Y
20 02 2 Y
20 03 5 N
30 01 2 Y
30 02 4 N


我写的触发器如下:
ALTER trigger [dbo].[T] ON [dbo].[table2] FOR INSERT
AS
SET NOCOUNT ON;
BEGIN
UPDATE table1 SET table1.B=( CASE WHEN (table2.E>=-1 AND table2.E<=3)THEN 'Y' ELSE 'N' END )
FROM table1 AS T1,table2 AS T2 WHERE T1.A=T2.C

END
但是如果这样的话,因为table2中会有多个判断值,所以每次进行新增时,会提示子查询的返回值不止一个。求解,如何实现只返回一个值呢。
...全文
106 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreamdoner 2015-01-12
  • 打赏
  • 举报
回复
即使是聚合也会出现返回值不止一个的报错,我已经通过两个UPDATE语句实现了,谢谢你!
还在加载中灬 2015-01-09
  • 打赏
  • 举报
回复
CREATE TRIGGER TRG_table2_INSERT
	ON table2
	FOR INSERT
AS
BEGIN
	SET NOCOUNT ON
	UPDATE T1
	SET B=T2.B
	FROM table1 T1 JOIN
		(SELECT C,CASE WHEN MIN(E)<-1 OR MAX(E)>3 THEN 'N'ELSE'Y'END B
		FROM table2
		GROUP BY C)T2 ON T1.A=T2.C
	SET NOCOUNT OFF
END
应该先聚合一下

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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