क्लाइंट एपीआई के माध्यम से कस्टम कनेक्शन स्ट्रिंग विशेषताओं को पारित करने और टी-एसक्यूएल का उपयोग करके पुनर्प्राप्त करने के लिए कोई सामान्यीकृत विधि नहीं है। हालाँकि, आपके पास कई विकल्प हैं। नीचे कुछ हैं।
विधि 1 :128 वर्णों तक पास करने और APP_NAME() T-SQL फ़ंक्शन के साथ पुनर्प्राप्त करने के लिए कनेक्शन स्ट्रिंग में एप्लिकेशन नाम कीवर्ड का उपयोग करें:
Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DB;Data Source=SERVER;Application Name="SomeAttr=SomeValue"
SELECT APP_NAME();
ध्यान दें कि यह 128 वर्णों तक सीमित है और आपको पेलोड को पार्स करना होगा। साथ ही, चूंकि ADO.NET प्रत्येक विशिष्ट कनेक्शन स्ट्रिंग के लिए एक अलग कनेक्शन पूल बनाता है, इसलिए विचार करें कि प्रभावी रूप से बहुत कम या कोई डेटाबेस कनेक्शन पूलिंग नहीं होगी।
विधि 2 :कनेक्ट करने के बाद एक SET CONTEXT_INFO निष्पादित करें और 128 बाइट्स तक असाइन करें जिसे CONTEXT_INFO) T-SQL फ़ंक्शन के साथ पुनर्प्राप्त किया जा सकता है:
DECLARE @context_info varbinary(128) = CAST('SomeAttr=SomeValue' AS varbinary(128));
SET CONTEXT_INFO @context_info;
SELECT CAST(CONTEXT_INFO() AS varchar(128));
ध्यान दें कि यह 128 बाइट्स तक सीमित है और आपको पेलोड को पार्स करना होगा।
विधि 3 :कनेक्ट करने के बाद सत्र-स्तरीय अस्थायी तालिका बनाएं और नाम/मान जोड़े डालें जिन्हें एक चयन क्वेरी के साथ पुनर्प्राप्त किया जा सकता है:
CREATE TABLE #CustomSessionAttributes(
AttributeName varchar(128) PRIMARY KEY
, AttributeValue varchar(1000));
INSERT INTO #CustomSessionAttributes VALUES('SomeAttr', 'SomeValue');
SELECT AttributeValue
FROM #CustomSessionAttributes
WHERE AttributeName = 'SomeAttr';
ध्यान दें कि आप विशेषता मान का आकार बढ़ा सकते हैं और आवश्यकतानुसार टाइप कर सकते हैं, और किसी पार्सिंग की आवश्यकता नहीं है।
विधि 4 :सत्र आईडी और विशेषता नाम द्वारा कुंजीबद्ध एक स्थायी तालिका बनाएं, कनेक्ट करने के बाद नाम/मूल्य जोड़े डालें जिसे एक चयन क्वेरी के साथ पुनर्प्राप्त किया जा सकता है:
CREATE TABLE dbo.CustomSessionAttributes(
SessionID smallint
, AttributeName varchar(128)
, AttributeValue varchar(1000)
, CONSTRAINT PK_CustomSessionAttributes PRIMARY KEY (SessionID, AttributeName)
);
--clean up previous session
DELETE FROM dbo.CustomSessionAttributes WHERE SessionID = @@SPID;
--insert values for this session
INSERT INTO dbo.CustomSessionAttributes VALUES(@@SPID, 'SomeAttr', 'SomeValue');
--retreive attribute value
SELECT AttributeValue
FROM dbo.CustomSessionAttributes
WHERE
SessionID = @@SPID
AND AttributeName = 'SomeAttr';
ध्यान दें कि आप विशेषता मान का आकार बढ़ा सकते हैं और आवश्यकतानुसार टाइप कर सकते हैं, और किसी पार्सिंग की आवश्यकता नहीं है।
संपादित करें:
विधि 5 :सत्र-दायरे वाले नाम/मान युग्मों को संग्रहीत करने के लिए संग्रहीत कार्यविधि sp_set_session_context का उपयोग करें और SESSION_CONTEXT() फ़ंक्शन के साथ मानों को पुनः प्राप्त करें। यह सुविधा SQL Server 2016 और Azure SQL डेटाबेस में पेश की गई थी।
EXEC sp_set_session_context 'SomeAttr', 'SomeValue';
SELECT SESSION_CONTEXT(N'SomeAttr');