sql >> Databáze >  >> RDS >> Sqlserver

Jak přidat vlastní atributy do připojovacího řetězce SQL?

Neexistuje žádná zobecněná metoda pro předávání vlastních atributů připojovacího řetězce prostřednictvím klientských rozhraní API a načítání pomocí T-SQL. Máte však několik alternativ. Níže je několik.

Metoda 1 :Použijte klíčové slovo Application Name v připojovacím řetězci k předání až 128 znaků a načtení pomocí funkce APP_NAME() T-SQL:

Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DB;Data Source=SERVER;Application Name="SomeAttr=SomeValue"

SELECT APP_NAME();

Pamatujte, že toto je omezeno na 128 znaků a budete muset analyzovat užitečné zatížení. Vzhledem k tomu, že ADO.NET vytváří samostatný fond připojení pro každý odlišný připojovací řetězec, zvažte, že ve skutečnosti bude sdružování databázových připojení jen malé nebo žádné.

Metoda 2 :Po připojení spusťte SET CONTEXT_INFO a přiřaďte až 128 bajtů, které lze načíst pomocí funkce 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));

Pamatujte, že toto je omezeno na 128 bajtů a budete muset analyzovat užitečné zatížení.

Metoda 3 :Po připojení vytvořte dočasnou tabulku na úrovni relace a vložte páry název/hodnota, které lze načíst pomocí SELECT dotazu:

CREATE TABLE #CustomSessionAttributes(
      AttributeName varchar(128) PRIMARY KEY
    , AttributeValue varchar(1000));
INSERT INTO #CustomSessionAttributes VALUES('SomeAttr', 'SomeValue');

SELECT AttributeValue 
FROM #CustomSessionAttributes 
WHERE AttributeName = 'SomeAttr';

Všimněte si, že velikost a typ hodnoty atributu můžete podle potřeby zvětšit a není potřeba žádná analýza.

Metoda 4 :Vytvořte trvalou tabulku klíčovanou ID relace a názvem atributu, po připojení vložte páry název/hodnota, které lze získat pomocí SELECT dotazu:

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';

Všimněte si, že velikost a typ hodnoty atributu můžete podle potřeby zvětšit a není potřeba žádná analýza.

UPRAVIT:

Metoda 5 :Použijte uloženou proceduru sp_set_session_context k uložení párů název/hodnota v rozsahu relace a načtení hodnot pomocí funkce SESSION_CONTEXT(). Tato funkce byla představena v SQL Server 2016 a Azure SQL Database.

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


  1. PostgreSQL:jak převést z epochy Unixu na datum?

  2. Jak úplně odstranit MySQL z Ubuntu

  3. Operátor SQLite INTERSECT

  4. Jak odstranit všechny neabecední znaky z řetězce na serveru SQL?