0

我在这里的第一篇文章,也是 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

任何帮助将不胜感激

谢谢

4

1 回答 1

0

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

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其视为table。它可以包含零、一或多

我还不能将它重新写成更简洁的形式,因为我不确定你为什么首先编写子选择以及它打算产生什么。

于 2013-09-06T10:22:13.130 回答