Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Recupera dinamicamente i nomi dei parametri e i valori correnti all'interno della stored procedure T-SQL

Sto cercando un pezzo standard di codice che posso inserire nella procedura in grado di scorrere tutti i parametri per il processo e recuperare i valori correnti passati--

Puoi ottenere tutti i valori passati per una sp usando la query sottostante

Esempio :
Ho archiviato di seguito il proc che mi fornisce i dettagli di vendita (solo per demo)

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

Ho chiamato il mio sp come di seguito..

exec  dbo.getsales 4

Ora, se voglio ottenere il valore passato, posso usare la query sottostante

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'

che mi ha mostrato di seguito come valore del tempo di compilazione

Detto questo, ci sono molte cose da considerare..possiamo usare metodi xml per ottenere questo valore

ora cosa succede, se eseguo di nuovo lo stesso processo memorizzato per un valore di 2 ..

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

Un problema importante qui è che i valori sopra vengono mostrati quando ho selezionato il piano di esecuzione da mostrare da ssms.

Ma quale sarà il valore nella cache, vediamolo usando di nuovo la query cache del piano sopra

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

Mostra ancora il valore compilato, più la colonna usecounts come 5--`il che significa che questo piano è stato utilizzato 5 volte e il parametro che è stato passato quando il piano è stato inizialmente compilato è 4.che significa anche che i valori di runtime non sono memorizzati nella cache dettagli dei piani..

Quindi, in sintesi, puoi ottenere i valori di runtime passati a stored proc

  • 1.Valori che vengono passati durante la compilazione dell'istruzione(
    Puoi iniziare a raccogliere queste informazioni per un periodo di tempo e registrarle in base al processo memorizzato, penso che nel tempo con i riavvii del server, pianificare le ricompilazioni puoi ottenere un nuovo set dei valori dei parametri)
  • 2.Anche entrare in contatto con il team DEV è un buon modo, poiché possono darti un elenco completo di parametri che possono essere passati, se questo esercizio è complicato