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

Dynamicky získávejte názvy parametrů a aktuální hodnoty uvnitř uložené procedury T-SQL

Hledám standardní kus kódu, který bych mohl vložit do procedury, která dokáže procházet všechny parametry pro proc a načíst aktuální hodnoty předané--

Všechny hodnoty předané pro sp můžete získat pomocí níže uvedeného dotazu

Příklad:
Níže mám uložený proces, který mi poskytuje podrobnosti o prodeji (pouze pro demo)

alter  proc dbo.getsales
(
@salesid int
)
as
begin
select 
* from sales where [email protected]
end

Zavolal jsem své sp jako níže..

exec  dbo.getsales 4

Nyní, pokud chci předat hodnotu, mohu použít níže uvedený dotaz

select top 10* from sys.dm_exec_cached_plans cp
cross apply
sys.dm_exec_text_query_plan(cp.plan_handle,default,default)
where objtype='proc'

který mi níže ukázal jako hodnotu času kompilace

s tím, co bylo řečeno, existuje mnoho věcí, které je třeba zvážit.. k získání této hodnoty můžeme použít metody xml

co se stane, když znovu spustím stejný uložený proces pro hodnotu 2 ..

<ColumnReference Column="@salesid" ParameterCompiledValue="(4)" ParameterRuntimeValue="(2)" />

Jedním z důležitých úlovků je, že výše uvedené hodnoty se zobrazí, když jsem vybral plán provádění, který se má zobrazit z ssms.

Ale jaká bude hodnota v mezipaměti, podívejme se na to znovu pomocí dotazu na mezipaměť nad plánem

<ColumnReference Column="@salesid" ParameterCompiledValue="(4)"/>

Stále zobrazuje zkompilovanou hodnotu plus sloupec usecounts jako 5--`, což znamená, že tento plán byl použit 5krát a parametr, který byl předán při počáteční kompilaci plánu, je 4. což také znamená, že hodnoty doby běhu nejsou uloženy v mezipaměti podrobnosti plánů..

Stručně řečeno, můžete získat hodnoty za běhu předané do uloženého procesu

  • 1.Hodnoty, které jsou předány při kompilaci příkazu(
    Můžete začít shromažďovat tyto informace v průběhu času a zaznamenávat je proti uloženému procesu, myslím, že časem s restartováním serveru, plánováním rekompilací můžete získat novou sadu hodnot parametrů)
  • 2. Dostat se do kontaktu s týmem DEV je také dobrý způsob, protože vám může poskytnout úplný seznam parametrů, které lze předat, pokud je toto cvičení těžkopádné


  1. Limit nahrávání dokumentů

  2. Jak importuji řádky do Postgresql ze STDIN?

  3. Zdá se, že @Column(unique=true) nefunguje

  4. Použití automatizace k urychlení testů vydání na PostgreSQL