sqlserver触发器表1插入数据,触发器执行更新到另外一个表,出现子查询错误

Create Trigger warring6
On Wate_quality_montioring              --在test表中创建触发器 
for insert,update                          --为什么事件触发 
As                                       --事件触发后所要做的事情
DECLARE @dissolved_oxygen float
DECLARE @ammonia_nitrogen float
DECLARE @water_temperature float
DECLARE @turbidity float
DECLARE @conductivity float
DECLARE @pH_value float
DECLARE @COD float
DECLARE @TOC float
DECLARE @water_quality_standard nvarchar(255)

SET @dissolved_oxygen= (select [dissolved_oxygen] from Wate_quality_montioring)
SET @ammonia_nitrogen = (select [ammonia_nitrogen] from Wate_quality_montioring)
SET @water_temperature= (select [water_temperature] from Wate_quality_montioring)
SET @turbidity = (select [turbidity] from Wate_quality_montioring)
SET @conductivity = (select [conductivity] from Wate_quality_montioring)
SET @pH_value= (select [pH_value] from Wate_quality_montioring)
SET @COD = (select [COD] from Wate_quality_montioring)
SET @TOC = (select [TOC] from Wate_quality_montioring)
SET @water_quality_standard= (select [water_quality_standard] from Wate_quality_montioring)

IF @dissolved_oxygen>10 
BEGIN          
INSERT INTO [dbo].[Historical_warning]
           ([Alert_type]
           ,[alert_source]
           ,[alert_status]
           ,[alert_time]
           ,[alert_content])
     VALUES
           ('报警类'
           ,'水质监测'
           ,'报警'
           ,getdate()
           ,'溶解氧超限预警')
END
IF @ammonia_nitrogen>10 
BEGIN          
INSERT INTO [dbo].[Historical_warning]
           ([Alert_type]
           ,[alert_source]
           ,[alert_status]
           ,[alert_time]
           ,[alert_content])
     VALUES
           ('报警类'
           ,'水质监测'
           ,'报警'
           ,getdate()
           ,'氨氮超限预警')
END
IF @water_temperature>10 
BEGIN          
INSERT INTO [dbo].[Historical_warning]
           ([Alert_type]
           ,[alert_source]
           ,[alert_status]
           ,[alert_time]
           ,[alert_content])
     VALUES
           ('报警类'
           ,'水质监测'
           ,'报警'
           ,getdate()
           ,'水温超限预警')
END
IF @turbidity>10 
BEGIN          
INSERT INTO [dbo].[Historical_warning]
           ([Alert_type]
           ,[alert_source]
           ,[alert_status]
           ,[alert_time]
           ,[alert_content])
     VALUES
           ('报警类'
           ,'水质监测'
           ,'报警'
           ,getdate()
           ,'浊度超限预警')
END
IF @conductivity>10 
BEGIN          
INSERT INTO [dbo].[Historical_warning]
           ([Alert_type]
           ,[alert_source]
           ,[alert_status]
           ,[alert_time]
           ,[alert_content])
     VALUES
           ('报警类'
           ,'水质监测'
           ,'报警'
           ,getdate()
           ,'电导率超限预警')
END
IF @pH_value>10 
BEGIN          
INSERT INTO [dbo].[Historical_warning]
           ([Alert_type]
           ,[alert_source]
           ,[alert_status]
           ,[alert_time]
           ,[alert_content])
     VALUES
           ('报警类'
           ,'水质监测'
           ,'报警'
           ,getdate()
           ,'PH值超限预警')
END
IF @COD>10 
BEGIN          
INSERT INTO [dbo].[Historical_warning]
           ([Alert_type]
           ,[alert_source]
           ,[alert_status]
           ,[alert_time]
           ,[alert_content])
     VALUES
           ('报警类'
           ,'水质监测'
           ,'报警'
           ,getdate()
           ,'COD超限预警')
END
IF @TOC>10 
BEGIN          
INSERT INTO [dbo].[Historical_warning]
           ([Alert_type]
           ,[alert_source]
           ,[alert_status]
           ,[alert_time]
           ,[alert_content])
     VALUES
           ('报警类'
           ,'水质监测'
           ,'报警'
           ,getdate()
           ,'总有机碳超限预警')
END
IF @water_quality_standard>10 
BEGIN          
INSERT INTO [dbo].[Historical_warning]
           ([Alert_type]
           ,[alert_source]
           ,[alert_status]
           ,[alert_time]
           ,[alert_content])
     VALUES
           ('报警类'
           ,'水质监测'
           ,'报警'
           ,getdate()
           ,'水质标准超限预警')
END

 

子查询返回多条,但不知道怎么去处理,网上说定义游标解决  但我不会下滑游标

确保代码里面的子查询返回的结果只有一条记录。

(select [water_quality_standard] from Wate_quality_montioring),上面这些查询语句返回了多笔记录,只能返回一条记录,加条件控制。

SET @dissolved_oxygen= (select [dissolved_oxygen] from Wate_quality_montioring)
SET @ammonia_nitrogen = (select [ammonia_nitrogen] from Wate_quality_montioring)
SET @water_temperature= (select [water_temperature] from Wate_quality_montioring)
SET @turbidity = (select [turbidity] from Wate_quality_montioring)
SET @conductivity = (select [conductivity] from Wate_quality_montioring)
SET @pH_value= (select [pH_value] from Wate_quality_montioring)
SET @COD = (select [COD] from Wate_quality_montioring)
SET @TOC = (select [TOC] from Wate_quality_montioring)
SET @water_quality_standard= (select [water_quality_standard] from Wate_quality_montioring)

可能是上面给变量赋值时,某个查询返回的值不止一个,你自己排查一下吧。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632