sql触发器不起作用
ALTERtrigger[dbo].[Dosage]on[dbo].[WaterCustomer]forupdate,insert,deleteasbegindeclar...
ALTER trigger [dbo].[Dosage] on [dbo].[WaterCustomer]
for update,insert,delete
as
begin
declare @bef float
declare @aft float
declare @amount float
select @bef=LastAmount,@aft=ThisTimeAmount,@amount=UsedAmount from WaterCustomer
if @amount=null
update WaterCustomer set UsedAmount=@aft-@bef where @amount=null
end
我要判断表WaterCustomer中UsedAmount是否为空,若是则使UsedAmount=ThisTimeAmount-LastAmount,但是我的触发器不起作用,我向表中插入新数据后,UsedAmount值还是为空 展开
for update,insert,delete
as
begin
declare @bef float
declare @aft float
declare @amount float
select @bef=LastAmount,@aft=ThisTimeAmount,@amount=UsedAmount from WaterCustomer
if @amount=null
update WaterCustomer set UsedAmount=@aft-@bef where @amount=null
end
我要判断表WaterCustomer中UsedAmount是否为空,若是则使UsedAmount=ThisTimeAmount-LastAmount,但是我的触发器不起作用,我向表中插入新数据后,UsedAmount值还是为空 展开
2个回答
展开全部
更多追问追答
追问
我改了 但还是不起作用 UsedAmount的值任然为空
追答
两个地方的@amount = null都改过了吗?
可以在触发器中使用print语句将一些变量值输出, 这样可以帮助你判断代码是否正确. 在你的例子中, 你可以在进入if判断之前输出一个文本, 比如print 'before enter', 然后做一个else, 并在条件成立和不成立的情况下都输出信息, 类似:
print 'before enter'
if @amount is null
begin
print 'execute true'
-- 你的更新代码写在这里
end
else
begin
print 'execute false'
end
然后, 直接在SQL Management Studio中执行触发此触发器的SQL语句, 看看输出的内容为何, 以此来检查你的代码.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询