最近,我继承了一个新的ASP Web应用程序,它仅允许客户在线支付其未付发票。该应用程序设计不佳,没有付款记录表。整个支付表已由将服务记录传输到记录会计系统的Web服务删除。为什么SQL触发器不按顺序插入行?
我刚刚在Payments表上创建了一个简单的触发器,它将Payments表中的数据复制到Payment_Log表中。最初,触发器只是做了select * on插入来复制数据。不过,我只是修改了触发器,将付款日期插入到Payment_Log表中,因为我们的客户有一些问题需要调试。新的触发器在下面。我的问题是,我已经注意到,在这个新版本的触发器中,行被插入到表格的中间(即不在最后)。有人可以解释为什么会这样吗?
ALTER trigger [dbo].[PaymentHistory] on [dbo].[Payments]
for insert as
Declare @InvoiceNo nvarchar(255),
@CustomerName nvarchar(255),
@PaymentAmount float,
@PaymentRefNumber nvarchar(255),
@BulkPaid bit,
@PaymentType nvarchar(255),
@PaymentDate datetime
Select @InvoiceNo = InvoiceNo,
@CustomerName = CustomerName,
@PaymentAmount = PaymentAmount,
@PaymentRefNumber = PaymentRefNumber,
@BulkPaid = BulkPaid,
@PaymentType = PaymentType
from inserted
Set @PaymentDate = GETDATE()
Insert into Payment_Log
values (@InvoiceNo, @CustomerName, @PaymentAmount, @PaymentRefNumber, @BulkPaid, @PaymentType, @PaymentDate)
下面是SQL Server Management Studio中的截图,显示被插入到表中数据的中间行。预先感谢帮助家伙。
1)表不*有*的命令,2)你的触发打破了多行插入,3)为什么要“命令”是无论如何一个问题? – 2012-08-13 14:43:56
您在这里遗漏的最重要的概念是'inserted'是一个**表**而不是**行**。 – Yuck 2012-08-13 14:45:34