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'); (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- linux mysql忘记密码的多种解决或Access denied
- sql-server – 查找与给定主键关联的外键
- sql – Oracle:如何在午夜之前选择当前日期(今天
- SQL Server Cont()与Where().Count()有时性能差别
- string – Hiveql – RIGHT()LEFT()函数
- mysql 5.7.21 安装配置方法图文教程(window)
- sql – ORDER BY和ROW_NUMBER()是否确定?
- sql-server – SSRS 2016 – 看不到参数
- sql-server – 在完成执行后如何检查SSIS包的作业
- sql – 在数据库中存储可重新排序的项目的高效方
