微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql-server – 如何向SQL连接字符串添加自定义属性?

我想在sqlServer连接字符串中添加一些自定义属性,如下所示:
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:连接后执行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:连接后创建会话级临时表,并插入可以使用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');

原文地址:https://www.jb51.cc/mssql/75386.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐