在期望条件的上下文中指定的非布尔类型的表达式,在')'附近

mik*_*ike 1 sql t-sql sql-server-2008

如果在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'
Run Code Online (Sandbox Code Playgroud)

我的更新脚本是

Update RTS.T_Referral   
set BookingUserReferenceValue =  cast ('John Wayne' as varbinary(256))
where ReferralId = 20
Run Code Online (Sandbox Code Playgroud)

我正在将记录更新John WayneT_Referral表中的varbinary (记录看起来像0x4A6F686E205761796E65),并且当调用更新触发器时,它会将该记录作为John Wayne加载到Audit表中.当记录插入BookingUserReferenceValue时,它将被加密.列BookingGserReferenceValue的数据类型是Varbinary(256).当我尝试更新该列中的记录时,我收到错误:

在期望条件的上下文中指定的非布尔类型的表达式,在')'附近.

任何想法都错了吗?谢谢

Clo*_*eto 5

你需要逃避单引号:

SET @Sql_Insert='
INSERT INTO [Logg].AuditLogData(TableName, ColumnName, OldValue, OldValue_Decode, NewValue, NewValue_Decode, AuditSubCategoryID,[GuID])
select 
    TableName, ColumnName, OldValue, OldValue_Decode, 
    case when ColumnName = ''BookingUserReferenceValue'' then utl.sfDecrypt(NewValue,0) Else NewValue end,
    NewValue_Decode, AuditSubCategoryID,[GuID] 
from #AuditLogData
where 
    ISNULL(OldValue, cast('''' as varbinary(256))) != 
    ISNULL([NewValue], cast('''' as varbinary(256)))
';
Run Code Online (Sandbox Code Playgroud)