Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में SESSION_CONTEXT () कैसे काम करता है

SQL सर्वर में, आप SESSION_CONTEXT() . का उपयोग कर सकते हैं वर्तमान सत्र के संदर्भ में निर्दिष्ट कुंजी के मान को पढ़ने के लिए कार्य करता है।

कुंजी (कुंजी/मूल्य जोड़ी) को पहले सेट करने की आवश्यकता है। यह sp_set_session_context . के साथ किया जा सकता है संग्रहीत प्रक्रिया।

सत्र के लिए कुंजी/मान युग्म सेट हो जाने के बाद, आप SESSION_CONTEXT() का उपयोग कर सकते हैं उस कुंजी का मान वापस करने के लिए।

उदाहरण 1 - मान सेट करें और वापस करें

यहां एक उदाहरण दिया गया है जो मूल अवधारणा और उपयोग को प्रदर्शित करता है।

EXEC sp_set_session_context @key =N'user_id', @value =15;SESSION_CONTEXT(N'user_id') AS user_id चुनें;

परिणाम:

+-----------+| user_id ||---------------|| 15 |+----------+

उदाहरण 2 - जब कोई कुंजी मौजूद न हो

यहां बताया गया है कि यदि आप किसी ऐसी कुंजी से मान प्राप्त करने का प्रयास करते हैं जो मौजूद नहीं है।

उफ़ के रूप में
SESSION_CONTEXT(N'oops') चुनें;

परिणाम:

+----------+| उफ़ ||-----------|| NULL |+----------+

उदाहरण 3 - "N" उपसर्ग

SESSION_CONTEXT() . को दिया गया तर्क sysname . प्रकार का है . मूल रूप से, यह nvarchar(128) NOT NULL . जैसा ही है , जिसका अर्थ है कि आपको N . के साथ तर्क को उपसर्ग करना होगा चरित्र।

अगर मैं N को हटा दूं तो यहां क्या होगा उपसर्ग:

EXEC sp_set_session_context @key ='भाषा', @value ='अंग्रेज़ी'; भाषा के रूप में SESSION_CONTEXT ('भाषा') चुनें;

परिणाम:

Msg 8116, Level 16, State 1, Line 5Argument डेटा प्रकार varchar session_context फ़ंक्शन के तर्क 1 के लिए अमान्य है।

N . को हटाकर उपसर्ग, मैं बस एक varchar . में गुजर रहा हूं , जब यह nvarchar होना चाहिए (या sysname सटीक होना)।

यहाँ यह N . के साथ है उपसर्ग:

EXEC sp_set_session_context @key =N'language', @value ='English'; SESSION_CONTEXT(N'language') AS भाषा चुनें;

परिणाम:

+---------------+| भाषा ||---------------|| अंग्रेज़ी |+---------------+

उदाहरण 4 - वापसी मूल्य

वापसी प्रकार SESSION_CONTEXT() sql_variant है .

आप SQL_VARIANT_PROPERTY() . का उपयोग कर सकते हैं आधार प्रकार का पता लगाने के लिए कार्य करें।

उदाहरण:

 SQL_VARIANT_PROPERTY(SESSION_CONTEXT(N'user_id'), 'BaseType' ) AS user_id, SQL_VARIANT_PROPERTY(SESSION_CONTEXT(N'language'), 'BaseType' ) AS भाषा चुनें;

परिणाम:

+-----------+---------------+| user_id | भाषा ||-----------+---------------|| इंट | वर्कर |+-----------+---------------+

उदाहरण 5 - वापसी मूल्यों को जोड़ना

यदि आपको अनेक परिणामों को संयोजित करने की आवश्यकता है, तो आपको परिणामों को sql_variant के अलावा किसी अन्य डेटा प्रकार में बदलना होगा प्रथम।

अगर मैं ऐसा नहीं करता तो क्या होता है इसका एक उदाहरण यहां दिया गया है:

उदाहरण:

EXEC sp_set_session_context N'user_fname', 'Homer';EXEC sp_set_session_context N'user_lname', 'Simpson';SELECT CONCAT(SESSION_CONTEXT(N'user_fname'), SESSION_CONTEXT(N'user_lname') पूर्व) परिणाम के रूप में;> 

परिणाम:

Msg 257, Level 16, State 3, Line 1डेटा प्रकार sql_variant से varchar में लागू रूपांतरण की अनुमति नहीं है। इस क्वेरी को चलाने के लिए CONVERT फ़ंक्शन का उपयोग करें।

इसलिए मुझे CAST() . का उपयोग करके परिणामों को स्पष्ट रूप से परिवर्तित करने की आवश्यकता है या CONVERT() उन्हें जोड़ने से पहले।

उदाहरण:

EXEC sp_set_session_context N'user_fname', 'Homer';EXEC sp_set_session_context N'user_lname', 'Simpson'; CONCAT(CAST(SESSION_CONTEXT(N'user_fname') AS varchar(5)), CAST(SESSION_CONTEXT(N'CONTEXT) चुनें user_lname') AS varchar(7)) ) AS परिणाम;

परिणाम:

+--------------+| परिणाम ||--------------|| होमर सिम्पसन |+--------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle को SKIP LOCKED के साथ TOP N पंक्तियों को वापस करने के लिए बाध्य करें

  2. SQL का उपयोग करके लगातार दिनांक सीमाओं का पता लगाएं

  3. स्पॉटलाइट क्लाउड सुरक्षा सुविधा - शाब्दिक निकालें

  4. जब सबक्वेरी EXISTS के साथ पेश नहीं की जाती है तो चयन सूची में केवल एक अभिव्यक्ति निर्दिष्ट की जा सकती है

  5. एंटिटी फ्रेमवर्क का उपयोग करके, मैं पढ़ने पर तालिका को कैसे लॉक कर सकता हूं?