0
表這樣的字段的值:ID,InvoiceDate,SystemEntryDate,InvoiceNo,GrossTotal,哈希。 對於ID = 1的記錄,使用SignByAsymKey函數計算記錄1中的所有字段的哈希值。SQL 2008更新從以前的記錄計算
對於所有其它記錄(ID> 2),散列與相同功能SignByAsymKey計算,用來自記錄和從以前記錄的散列的所有字段。
例如,對於ID = 3,使用字段InvoiceDate,SystemEntryDate,InvoiceNo,GrossTotal以及該記錄的哈希與ID = 2的記錄來計算哈希值。
我該怎麼做?使用觸發器還是存儲過程更好?
我做了一個更新觸發器這樣,但它給出了相同的散列所有記錄> 1:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Invoice_update]
ON [dbo].[Invoice]
AFTER update
AS
BEGIN
SET NOCOUNT ON;
update dbo.Invoice
set [hash]=
(Case
when
dbo.Invoice.ID=1
Then
SignByAsymKey (
AsymKey_Id ('SecureAsymmetricKeyINVOICE'),
CONVERT([nvarchar],(select [InvoiceDate] from Invoice where [ID]=1),0)+';'+
CONVERT([nvarchar],(select [SystemEntryDate] from Invoice where [ID]=1),0)+';'+
CONVERT([nvarchar],(select [InvoiceNo] from Invoice where [ID]=1),0)+';'+
CONVERT([nvarchar],(select [GrossTotal] from Invoice where [ID]=1),0)
,N'Portal2011!')
else
SignByAsymKey (
AsymKey_Id ('SecureAsymmetricKeyINVOICE'),
CONVERT([nvarchar],inserted.[InvoiceDate],0)+';'+
CONVERT([nvarchar],inserted.[SystemEntryDate],0)+';'+
CONVERT([nvarchar],inserted.[InvoiceNo],0)+';'+
CONVERT([nvarchar],inserted.[GrossTotal],0)+';'+
CONVERT([nvarchar],
(select [hash] from dbo.Invoice
where [id]=inserted.id-1),0)
,N'Portal2011!')
End)
from inserted
End
但如何做到這一點,我在SQL新秀。你能發佈一個代碼示例嗎? –
@ Hugo:在Web上有很多針對SQL Server編寫觸發器的代碼示例。你有哪些困難? – RedFilter
我的難處是引用前面的記錄來計算哈希。 –