最近,我繼承了一個新的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