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
我的难处是引用前面的记录来计算哈希。 –