मैं संग्रहित प्रक्रिया से उपयोगकर्ता कोड को तालिका ऑडिटिंग उद्देश्यों के लिए एक DELETE ट्रिगर में पास करने के लिए CONTEXT_INFO
का उपयोग करने का प्रयास कर रहा हूं।वर्चर को CONTEXT_INFO कास्टिंग और परिणामी लंबाई
यह सब ठीक काम करता है, हालांकि मैंने देखा कि ऑडिट तालिका में सहेजे गए उपयोगकर्ताकोड की लंबाई सही नहीं थी।
एक उदाहरण के रूप में इस स्क्रिप्ट ले लो ...
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
परिणाम:
लेन (@userCode) = 8
लेन (@temp_userCode) = 50
@temp_userCode
वैरिएबल 50 की लंबाई के साथ वापस आ रहा है, और मैं इसे वापस स्टोर करने के लिए इसकी मूल लंबाई पर कैसे ट्रिम कर सकता हूं ctly?
अतिरिक्त जानकारी:
चल रहा है SQL सर्वर 2005, तथापि समाधान सभी संस्करणों 2005 के बाद में काम करने की जरूरत है।
हालांकि यह काम करता है मैं SQL_Latin1_General_CP437_BIN को मिलान बदलना पड़ा। यह परीक्षण और त्रुटि पर आधारित था हालांकि मुझे बहुत आत्मविश्वास से नहीं छोड़ता है। मैं कैसे स्पष्ट कर सकता हूं कि मुझे किस संयोजन का उपयोग करना चाहिए? –
@Poz - आपने अपने प्रश्न में SQL सर्वर संस्करण नहीं बताया था। यदि 2008 से पहले '100' कॉलेशन उपलब्ध नहीं होंगे। –
क्षमाप्रार्थी। मैं 2005 चला रहा हूं, हालांकि इसे इसके ऊपर के सभी संस्करणों के लिए भी उपयुक्त होना चाहिए। –