2014-08-30 8 views
10

मैं इस तरह SqlServer कनेक्शन स्ट्रिंग, कुछ में कुछ कस्टम विशेषताएं जोड़ने के लिए चाहते हैं:SQL कनेक्शन स्ट्रिंग में कस्टम विशेषताओं को कैसे जोड़ें?

Integrated Security=SSPI;Extended Properties="SomeAttr=SomeValue";Persist Security Info=False;Initial Catalog=DB;Data Source=SERVER 

और फिर एसक्यूएल में उस गुण मिलता है। उदाहरण के लिए SELECT SOME_FUNCTION('SomeAttr')

उत्तर

16

क्लाइंट एपीआई के माध्यम से कस्टम कनेक्शन स्ट्रिंग विशेषताओं को पारित करने और टी-एसक्यूएल का उपयोग करके पुनर्प्राप्त करने के लिए कोई सामान्यीकृत विधि नहीं है। हालांकि, आपके पास कई विकल्प हैं। नीचे कुछ हैं।

विधि 1:

Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DB;Data Source=SERVER;Application Name="SomeAttr=SomeValue" 

SELECT APP_NAME(); 

ध्यान दें कि यह 128 तक ही सीमित है: 128 अक्षरों तक गुजरती हैं और() T-SQL समारोह APP_NAME के ​​साथ पुनः प्राप्त करने के कनेक्शन स्ट्रिंग में ऐप्लिकेशन का नाम कीवर्ड का प्रयोग करें पात्रों और आपको पेलोड को पार्स करने की आवश्यकता होगी। साथ ही, चूंकि ADO.NET प्रत्येक विशिष्ट कनेक्शन स्ट्रिंग के लिए एक अलग कनेक्शन पूल बनाता है, मान लें कि वहां प्रभावी रूप से कम या कोई डेटाबेस कनेक्शन पूलिंग नहीं होगी।

विधि 2: एक सेट 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: एक स्थायी तालिका सत्र id से keyed बनाएँ और विशेषता नाम, सम्मिलित नाम/मान युग्म के बाद कनेक्ट है कि एक चयन करें क्वेरी के साथ प्राप्त किया जा सकता है:

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'); 
1

आप कनेक्शन स्ट्रिंग में WSID और APP कीवर्ड का उपयोग कर सकते हैं। आप HOST_NAME() और APP_NAME() फ़ंक्शंस का उपयोग करके उन मानों को पढ़ सकते हैं। विवरण के लिए http://msdn.microsoft.com/en-us/library/ms130822.aspx देखें।

संबंधित मुद्दे