Jeg leder efter et standard stykke kode, som jeg kan stikke ind i proceduren, der kan sløjfe gennem alle parametre for processen og hente de aktuelle værdier, der er sendt i--
Du kan få alle værdier sendt ind for en sp ved at bruge nedenstående forespørgsel
Eksempel:
Jeg har nedenfor gemt proc, som giver mig salgsoplysninger (kun til demo)
alter proc dbo.getsales
(
@salesid int
)
as
begin
select
* from sales where [email protected]
end
Jeg har ringet til min sp som nedenfor..
exec dbo.getsales 4
Hvis jeg nu ønsker at få værdi bestået, kan jeg bruge nedenstående forespørgsel
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'
som viste mig nedenfor som kompileringstidsværdien
med det sagt, er der mange ting at overveje.. vi kan bruge xml-metoder til at få denne værdi
Hvad sker der nu, hvis jeg kører den samme lagrede proc igen til en værdi af 2 ..
<ColumnReference Column="@salesid" ParameterCompiledValue="(4)" ParameterRuntimeValue="(2)" />
En vigtig fangst her er, at ovenstående værdier vises, når jeg valgte en eksekveringsplan til at vise fra ssms.
Men hvad vil værdien i cache være, lad os se det ved at bruge ovenstående cache-forespørgsel igen
<ColumnReference Column="@salesid" ParameterCompiledValue="(4)"/>
Den viser stadig den kompilerede værdi plus usecounts-kolonnen som 5--`hvilket betyder, at denne plan er blevet brugt 5 gange, og parameteren, der blev bestået, da planen oprindeligt blev kompileret, er 4.hvilket også betyder, at køretidsværdier ikke er gemt i cachen planer detaljer..
Så sammenfattende kan du få runtime-værdier overført til lagret proc
- 1.Værdier, der sendes, mens sætningen kompileres(
Du kan begynde at indsamle disse oplysninger over en periode og logge dem mod lagret proc, jeg tror, at du med tiden med servergenstarter, planlægger genkompileringer, kan få nyt sæt af parameterværdier) - 2. At komme i kontakt med DEV-teamet er også en god måde, da de kan give dig en samlet liste over parametre, der kan passeres, hvis denne øvelse er omstændelig