Sdílet prostřednictvím


SESSION_CONTEXT (Transact-SQL)

platí pro: SQL Server 2016 (13.x) a novější Azure SQL Databaseazure SQL Managed Instancekoncový bod azure Synapse AnalyticsSQL Analytics v Microsoft FabricWarehouse v Microsoft Fabric

Vrátí hodnotu zadaného klíče v kontextu aktuální relace. Hodnota je nastavena pomocí sp_set_session_context procedury.

Transact-SQL konvence syntaxe

Syntaxe

SESSION_CONTEXT(N'key')

Argumenty

"klíč"

Klíč načtené hodnoty. key je sysname.

Návratové typy

sql_variant

Návratová hodnota

Hodnota přidružená k zadanému klíči v kontextu relace nebo NULL pokud pro tento klíč není nastavená žádná hodnota.

Povolení

Každý uživatel může přečíst kontext relace pro svoji relaci.

Poznámky

Chování MARS pro SESSION_CONTEXT' je podobné jako chování CONTEXT_INFO. Pokud dávka MARS nastaví pár klíč-hodnota, nová hodnota se nevrátí v jiných dávkách MARS ve stejném připojení, pokud nezačnou po dávce, která nastaví novou hodnotu dokončenou. Pokud je v připojení aktivních více dávek MARS, hodnoty nelze nastavit jako read_only. To zabraňuje podmínkám časování a nedeterminismu o tom, jakou hodnotu vyhrává.

Příklady

Následující jednoduchý příklad nastaví hodnotu kontextu relace pro klíč user_id na 4 a pak použije SESSION_CONTEXT funkci k načtení hodnoty.

EXECUTE sp_set_session_context 'user_id', 4;

SELECT SESSION_CONTEXT(N'user_id');

Známé problémy

Problém Datum zjištění Stav Datum vyřešení
K výjimce porušení přístupu (AV) může dojít u SESSION_CONTEXT funkce za určitých podmínek. Při spuštění funkce v rámci plánu paralelního spuštění při resetování relace pro opakované použití může dojít k výjimkám AV nebo nesprávným výsledkům SESSION_CONTEXT .

Oprava, která byla zavedena v SQL Serveru 2019 (15.x) CU 14 k vyřešení nesprávného problému s výsledky v SESSION_CONTEXT rámci paralelních plánů, byla později nalezena, aby za určitých podmínek způsobovala výjimky AV.

Pokud chcete tento problém zmírnit, můžete příznak trasování 11024 povolit jako příznak spuštění, globálního nebo trasování relace. Tento příznak trasování vynutí SESSION_CONTEXT , aby se sériově spustil, což mu brání v účasti v plánech paralelních dotazů.

Platí pro: SQL Server 2019 (15.x) CU 14 a novější verze.
leden 2022 Má řešení