ID, InvoiceDate, SystemEntryDate, InvoiceNo, GrossTotal, Hash와 같은 표가 있습니다. ID가 1 인 레코드의 경우 해시는 레코드 1의 모든 필드와 SignByAsymKey 함수로 계산됩니다.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 : 웹에서 SQL Server 용 트리거를 작성하는 코드 예제가 많이 있습니다. 어느 부분에 어려움이 있습니까? – RedFilter
내 어려움은 이전 레코드를 참조하여 해시를 계산하는 것입니다. –