Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dynamiczne pobieranie nazw parametrów i bieżących wartości w procedurze przechowywanej T-SQL

Szukam standardowego fragmentu kodu, który mógłbym wkleić do procedury, która może przejść przez wszystkie parametry procedury i pobrać bieżące wartości przekazane w--

Możesz uzyskać wszystkie wartości przekazane do sp za pomocą poniższego zapytania

Przykład:
Mam poniżej zapisany proces, który daje mi szczegóły sprzedaży (tylko dla wersji demonstracyjnej)

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

Nazwałem mojego sp jak poniżej.

exec  dbo.getsales 4

Teraz, jeśli chcę przekazać wartość, mogę użyć poniższego zapytania

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'

który pokazał mi poniżej jako wartość czasu kompilacji

Mając to na uwadze, jest wiele rzeczy do rozważenia.. możemy użyć metod xml, aby uzyskać tę wartość

co się stanie, jeśli ponownie uruchomię ten sam przechowywany proces dla wartości 2 ..

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

Jednym z ważnych haczyków jest to, że powyższe wartości są wyświetlane, gdy wybrałem plan wykonania do wyświetlenia z ssms.

Ale jaka będzie wartość w pamięci podręcznej, zobaczmy ją ponownie za pomocą powyższego zapytania w pamięci podręcznej planu

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

Wciąż pokazuje skompilowaną wartość, plus kolumna liczników użycia jako 5--`, co oznacza, że ​​ten plan został użyty 5 razy, a parametr, który został przekazany podczas początkowej kompilacji planu to 4. co oznacza również, że wartości czasu działania nie są przechowywane w pamięci podręcznej szczegóły planów...

Podsumowując, możesz uzyskać wartości runtime przekazane do zapisanego proc

  • 1.Wartości, które są przekazywane podczas kompilacji instrukcji (
    Możesz zacząć zbierać te informacje przez pewien okres czasu i logować je do zapisanego proc, myślę, że z biegiem czasu po ponownym uruchomieniu serwera, zaplanuj rekompilacje, możesz uzyskać nowy zestaw wartości parametrów)
  • 2.Skontaktowanie się z zespołem DEV jest również dobrym sposobem, ponieważ mogą podać pełną listę parametrów, które można przekazać, jeśli to ćwiczenie jest uciążliwe


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak znaleźć _dokładny_ błąd w SQL Server?

  2. Jak zmienić typ danych kolumny w SQL Server?

  3. Skonfiguruj Lucene.Net z SQL Server

  4. Uwierzytelnianie SQL Server a uwierzytelnianie Windows:którego używać i kiedy

  5. Automatycznie rozwiąż konflikt scalania kluczy podstawowych