gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:45:46 24 4
gpt4 key购买 nike

我想在 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:连接后创建 session 级临时表并插入可通过 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:创建一个由 session 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 范围的名称/值对并使用 SESSION_CONTEXT() 检索值功能。此功能是在 SQL Server 2016 和 Azure SQL 数据库中引入的。

EXEC sp_set_session_context 'SomeAttr', 'SomeValue';
SELECT SESSION_CONTEXT(N'SomeAttr');

关于sql-server - 如何向 SQL 连接字符串添加自定义属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25581002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com