Ich suche nach einem Standardcode, den ich in die Prozedur stecken kann, der alle Parameter für die Prozedur durchlaufen und die aktuellen übergebenen Werte abrufen kann--
Sie können alle Werte erhalten, die für einen SP übergeben werden, indem Sie die folgende Abfrage verwenden
Beispiel:
Ich habe unten eine gespeicherte Prozedur, die mir Verkaufsdetails gibt (nur für die Demo)
alter proc dbo.getsales
(
@salesid int
)
as
begin
select
* from sales where [email protected]
end
Ich habe meinen SP wie unten genannt..
exec dbo.getsales 4
Wenn ich nun einen Wert übergeben möchte, kann ich die folgende Abfrage verwenden
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'
was mir unten als Kompilierzeitwert angezeigt wurde
Abgesehen davon gibt es viele Dinge zu beachten. Wir können XML-Methoden verwenden, um diesen Wert zu erhalten
Was passiert nun, wenn ich dieselbe gespeicherte Prozedur erneut für den Wert 2 ausführe ..
<ColumnReference Column="@salesid" ParameterCompiledValue="(4)" ParameterRuntimeValue="(2)" />
Ein wichtiger Haken hier ist, dass die obigen Werte angezeigt werden, wenn ich den Ausführungsplan zum Anzeigen von ssms ausgewählt habe.
Aber was wird der Wert im Cache sein, sehen wir ihn uns noch einmal mit der obigen Plan-Cache-Abfrage an
<ColumnReference Column="@salesid" ParameterCompiledValue="(4)"/>
Es zeigt immer noch den kompilierten Wert plus die Usecounts-Spalte als 5 an – was bedeutet, dass dieser Plan 5 Mal verwendet wurde und der Parameter, der übergeben wurde, als der Plan ursprünglich kompiliert wurde, 4 ist. Dies bedeutet auch, dass Laufzeitwerte nicht im Cache gespeichert werden Plandetails..
Zusammenfassend können Sie also Laufzeitwerte erhalten, die an die gespeicherte Prozedur
übergeben werden- 1.Werte, die übergeben werden, während die Anweisung kompiliert wird (
Sie können damit beginnen, diese Informationen über einen bestimmten Zeitraum zu sammeln und sie gegen gespeicherte Prozesse zu protokollieren, ich denke, im Laufe der Zeit mit Server-Neustarts, Neukompilierungen planen, können Sie neue Sätze erhalten von Parameterwerten) - 2. Sich mit dem DEV-Team in Verbindung zu setzen, ist auch ein guter Weg, da es Ihnen eine vollständige Liste der Parameter geben kann, die übergeben werden können, wenn diese Übung schwierig ist