我想補充的SqlServer中的連接字符串,一些東西自定義屬性是這樣的:如何將自定義屬性添加到SQL連接字符串?
Integrated Security=SSPI;Extended Properties="SomeAttr=SomeValue";Persist Security Info=False;Initial Catalog=DB;Data Source=SERVER
,然後讓在SQL中的屬性。例如SELECT SOME_FUNCTION('SomeAttr')
我想補充的SqlServer中的連接字符串,一些東西自定義屬性是這樣的:如何將自定義屬性添加到SQL連接字符串?
Integrated Security=SSPI;Extended Properties="SomeAttr=SomeValue";Persist Security Info=False;Initial Catalog=DB;Data Source=SERVER
,然後讓在SQL中的屬性。例如SELECT SOME_FUNCTION('SomeAttr')
沒有通過客戶端API傳遞自定義連接字符串屬性的通用方法,並使用T-SQL進行檢索。不過,你有很多選擇。以下是一些。
方法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:執行一組CONTEXT_INFO連接並分配多達128個字節可以與CONTEXT_INFO)T-SQL函數retreived後:
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:創建後,會話級臨時表接插可以用一個SELECT查詢檢索名稱/值對:
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鍵入一個永久表和屬性名,插入名稱/值對連接後,可以用一個SELECT查詢檢索:
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');
您可以在連接字符串中使用WSID和APP關鍵字。您可以使用HOST_NAME()和APP_NAME()函數讀取這些值。詳情請參閱http://msdn.microsoft.com/en-us/library/ms130822.aspx。