यदि आपको संदेश के साथ SQL सर्वर त्रुटि Msg 8116 मिल रही है तर्क डेटा प्रकार varchar session_context फ़ंक्शन के तर्क 1 के लिए अमान्य है , ऐसा इसलिए है क्योंकि आप किसी फ़ंक्शन में गलत डेटा प्रकार पास कर रहे हैं - इस मामले में SESSION_CONTEXT()
समारोह।
यह तब हो सकता है जब आप SESSION_CONTEXT()
. पर एक स्ट्रिंग अक्षरशः पास करते हैं इसे N
. के साथ उपसर्ग किए बिना कार्य करें चरित्र।
वही त्रुटि (Msg 8116) अन्य संदर्भों में भी हो सकती है - यह SESSION_CONTEXT()
तक सीमित नहीं है समारोह। उदाहरण के लिए, SUBSTRING()
. का उपयोग करते समय आपको वही त्रुटि मिल सकती है समारोह।
त्रुटि का उदाहरण
यहां कोड का एक उदाहरण दिया गया है जो त्रुटि उत्पन्न करता है:
EXEC sp_set_session_context
@key = 'language',
@value = 'English';
SELECT SESSION_CONTEXT('language');
परिणाम:
Msg 8116, Level 16, State 1, Line 4 Argument data type varchar is invalid for argument 1 of session_context function.
यहां, मैंने SESSION_CONTEXT()
. के पहले तर्क के रूप में एक स्ट्रिंग पास की है , लेकिन मैंने इसके पहले N
. नहीं लगाया था ।
SESSION_CONTEXT()
. को दिया गया तर्क मूल्य प्राप्त करने की कुंजी है। यह sysname
. प्रकार का होना चाहिए . यह मूल रूप से nvarchar(128) NOT NULL
. जैसा ही है , जिसका अर्थ है कि आपको स्ट्रिंग अक्षर को N
. के साथ उपसर्ग करना होगा चरित्र।
वही त्रुटि (संदेश 8116) कई अन्य संदर्भों में हो सकती है - यह SESSION_CONTEXT()
तक सीमित नहीं है समारोह।
किसी भी तरह से, इसका मतलब है कि आप गलत डेटा प्रकार को फ़ंक्शन में भेज रहे हैं।
समाधान
उपरोक्त समस्या को हल करने के लिए, हमें केवल N
. के साथ कुंजी को उपसर्ग करना होगा चरित्र:
EXEC sp_set_session_context
@key = 'language',
@value = 'English';
SELECT SESSION_CONTEXT(N'language');
परिणाम:
English
समस्या सुलझ गयी। मैंने केवल 'language'
में बदलाव के साथ किया करने के लिए N'language'
।
जैसा कि बताया गया है, त्रुटि 8116 SESSION_CONTEXT()
. तक सीमित नहीं है समारोह। किसी भी तरह से, समाधान समान है - सुनिश्चित करें कि तर्क डेटा प्रकार का है जिसे फ़ंक्शन स्वीकार करता है।