当前位置: 首页 > 面试题库 >

如何在SQL连接字符串中添加自定义属性?

山森
2023-03-14
问题内容

我想在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:在连接字符串中使用Application Name关键字最多传递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 2016Azure SQL数据库中引入了此功能。

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


 类似资料:
  • 问题内容: 如果我有一个字符串变量: 我想在每一个前面加一个转义字符和 变量中 (即 未 竟逃脱字符),我该怎么做? 问题答案: 我不是在这里要求优雅,但我 认为 它可以满足您的要求(如果我误会了,请纠正我): 输出

  • 问题内容: 我当前的格式字符串是: 我想添加一个新字段,在包含该格式化程序的每个脚本中它将具有不同的值。 但是我不确定如何将该值传递给记录器以内插到格式字符串中。我显然可以通过每次传递它使其出现在日志消息中,但这很麻烦。 我试过了: 但没有任何作用。 问题答案: 您可以使用LoggerAdapter,这样就不必在每次记录调用时都传递额外的信息: 日志(类似) 过滤器还可用于添加上下文信息。 产生类

  • 问题内容: 背后有不同的原因,但是我想知道如何简单地向JSX中的元素添加自定义属性? 问题答案: 编辑:更新以反映React 16 React 16本机支持自定义属性。这意味着向元素添加自定义属性现在就像将其添加至函数一样简单,如下所示: 先前的答案(第15和更早版本) 当前不支持自定义属性。有关更多信息,请参见此未解决的问题: 解决方法是,您可以在中执行以下操作:

  • 问题内容: 我有一个varchar字段,例如: 我需要将这些值更改为: 问题答案: 如果要添加“。” 您可以在值的最后两位数字之前执行以下操作:

  • 问题内容: 我正在使用MS Visual Studio 2010创建具有SQL Server 2008数据库访问权限的应用程序,但是我创建数据库所做的只是添加了一个新的“ SQL Server 2008数据库项目”,它对其进行了添加,并向我显示了解决方案中的所有内容资源管理器,但是我如何编写连接字符串以连接到它,因为我编写了此字符串,但没有用。 更新: 我用了这个: 但是当我使用时,它告诉我登录失

  • 问题内容: 在Ruby中,您可以使用自定义方法覆盖任何内置对象类,如下所示: 我如何在python中做到这一点?有正常的方法还是黑客? 问题答案: 您不能这样做,因为内建类型是用C编码的。您可以对类型进行子类化: 测试: 您还可以使用来覆盖str-type ,但这并不意味着您可以使用文字,因为它链接到内建的。