【发布时间】:2012-10-14 20:26:52
【问题描述】:
如果 T_Referral 表上发生任何更新,我在触发器中有一个脚本来插入审计表,并且我正在使用 Decrypt 函数来解密其中一列中的数据。我在触发器中的代码是:
DECLARE @Sql_Insert nvarchar(max)
SET @Sql_Insert = ''
SET @Sql_Insert='INSERT INTO [Logg].AuditLogData(TableName, ColumnName, OldValue, OldValue_Decode, NewValue, NewValue_Decode, AuditSubCategoryID,[GuID])
select TableName, ColumnName, OldValue_Decode, case when ColumnName = ''BookingUserReferenceValue'' then utl.sfDecrypt(NewValue,0) Else NewValue end, NewValue_Decode, AuditSubCategoryID,[GuID] from #AuditLogData
where ISNULL(OldValue,'') != ISNULL([NewValue],'')'
exec utl.uspOpenOrCloseEncryptionKey 'open'
exec(@Sql_Insert )
exec utl.uspOpenOrCloseEncryptionKey 'close'
我的更新脚本是
Update RTS.T_Referral
set BookingUserReferenceValue = cast ('John Wayne' as varbinary(256))
where ReferralId = 20
我正在将记录更新为John Wayne 作为T_Referral 表中的varbinary(记录看起来像0x4A6F686E205761796E65),并且当调用更新触发器时,它将将该记录作为John Wayne 加载到审计表中。当记录插入 BookingUserReferenceValue 时,它将被加密。 BookingUserReferenceValue 列的数据类型是 Varbinary(256)。当我尝试更新该列中的记录时,出现错误:
在上下文中指定的非布尔类型的表达式 条件是预期的,在 ')' 附近。
任何想法有什么问题吗? 谢谢
【问题讨论】:
-
utl.sfDecrypt(NewValue,0) 和 NewValue 是否属于同一数据类型?
标签: sql sql-server-2008 tsql