Tsql SQL Server 2012中的触发器

Tsql SQL Server 2012中的触发器,tsql,triggers,sql-server-2012,Tsql,Triggers,Sql Server 2012,我在这里的第一篇文章,是SQL Server的新手 我以前写过几个触发器,这个似乎不起作用。是我的吗?我没有收到任何错误。只是没有电子邮件 Use ABCTRAINING SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO alter TRIGGER TAXPERCENT ON [dbo].[AP101_VOUCHER_DISTR] AFTER update AS declare @VAT numeric(15,2), @To

我在这里的第一篇文章,是SQL Server的新手

我以前写过几个触发器,这个似乎不起作用。是我的吗?我没有收到任何错误。只是没有电子邮件

Use ABCTRAINING

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO



alter TRIGGER TAXPERCENT
   ON  [dbo].[AP101_VOUCHER_DISTR] AFTER update AS 



declare @VAT numeric(15,2),
@Total numeric(15,2),
@VATPERCENT numeric(15,2),
@Voucher nvarchar(max),
@AMT numeric(15,2),
@GL numeric(15,2)

Select @Voucher = i.ap101_voucher,
@AMT = i.ap101_amt,
@GL = i.AP101_GL_ACCT,
@VAT = (select sum(iif(@GL = '70102501110' or @GL = '70102501120',@AMT,0))),
@Total = (select sum(@AMT)),
@VATPERCENT = @VAT/(@Total-@VAT)
from inserted i


if @VATPERCENT <> 0.140

BEGIN
DECLARE @msg nvarchar(MAX)
Declare @Subj varchar(MAX)
Declare @EM nvarchar(MAX)
SET @msg = 'The VAT on this Voucher ' + @Voucher + ' ' + 'does not equal 14% ' + ' ' + @VATPERCENT
SET @Subj = 'Voucher Error'
set @EM = 'xxxxxx@company.co.za'

EXEC msdb.dbo.sp_send_dbmail 
@importance ='High',
@recipients=@EM,
@body= @msg,
@subject = @Subj,
@body_format = 'HTML',  
@profile_name = 'ABC Profile'
END
任何帮助都将不胜感激


谢谢

在特定情况下,是的,您认为嵌套选择不起作用是正确的

Select @Voucher = i.ap101_voucher,
@AMT = i.ap101_amt,
@GL = i.AP101_GL_ACCT,
@VAT = (select sum(iif(@GL = '70102501110' or @GL = '70102501120',@AMT,0))),
@Total = (select sum(@AMT)),
@VATPERCENT = @VAT/(@Total-@VAT)
from inserted i
在执行嵌套选择时,@GL和@AMT尚未赋值。SELECT子句中的所有列都是有效/逻辑并行计算的

正如我在评论中所说,您还需要将inserted视为一个表。它可以包含零行、一行或多行


我还不能将其重新写入一个更干净的表单,因为我不确定您当初为什么要编写subselect,以及它打算产生什么。

您正在编写损坏的触发器。“插入”和“删除”可以包含多行,也可以不包含行。您不能只将列值分配给标量变量。严格来说,您甚至不能保证多个变量都将从同一行接收值。当我在Man Studio中运行该脚本时,它工作正常。它只给出一条正弦线。选择ap101_凭证,当ap101_总账账户在“7010250110”、“70102501120”中时选择sumcase,然后选择ap101_金额,否则0结束为税,根据ap101_凭证将sumAP101_金额作为插入组中的temp总计选择ap101_凭证,总税/总税作为temp的VAT百分比