我試圖使用CONTEXT_INFO
將用戶代碼從存儲過程傳遞到DELETE觸發器以進行表審計。將CONTEXT_INFO轉換爲varchar並生成長度
它一切正常,但我注意到,在審計表中保存的用戶代碼的長度不正確。
取本腳本作爲一個例子...
declare @userCode varchar(50)
set @userCode = 'TestUser'
declare @binary_userCode varbinary(128)
set @binary_userCode = cast(@userCode as varbinary(128))
set CONTEXT_INFO @binary_userCode
declare @temp_userCode varchar(50)
set @temp_userCode = (select cast(CONTEXT_INFO() as varchar(50)))
--set @temp_userCode = rtrim(ltrim(@temp_userCode))
select @userCode, len(@userCode), @temp_userCode, len(@temp_userCode)
set CONTEXT_INFO 0x
結果:
LEN(@userCode)= 8
LEN(@temp_userCode)= 50
爲什麼@temp_userCode
變量返回的長度爲50,如何將其修剪回原始長度以便將其存儲ctly?
更多信息:
運行SQL Server 2005,但該解決方案需要在2005年以後的所有版本的工作。
這工作,我不得不整理更改爲SQL_Latin1_General_CP437_BIN。這是基於試驗和錯誤,但這並沒有給我很多信心。我該如何澄清我應該使用的排序規則? – 2012-02-24 17:14:10
@Poz - 你沒有在你的問題中聲明SQL Server版本。如果在2008年之前,「100」排序規則將不可用。 – 2012-02-24 17:15:33
道歉。我正在運行2005年,但它也需要適用於以上所有版本。 – 2012-02-24 17:18:12