Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Динамично извличане на имена на параметри и текущи стойности в T-SQL съхранена процедура

Търся стандартен код, който мога да вмъкна в процедурата, който може да премине през всички параметри за процедурата и да извлече текущите стойности, предадени в--

Можете да получите всички стойности, предадени за sp, като използвате заявката по-долу

Пример:
По-долу имам съхранена процедура, която ми дава подробности за продажбите (само за демонстрация)

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

Обадих се на моя sp както по-долу..

exec  dbo.getsales 4

Сега, ако искам да получа предадена стойност, мога да използвам заявката по-долу

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'

което ми показа по-долу като стойност на времето за компилиране

с това казано, има много неща, които трябва да вземем предвид.. можем да използваме xml методи, за да получим тази стойност

сега какво ще се случи, ако стартирам същата съхранена процедура отново за стойност 2 ..

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

Една важна уловка тук е, че горните стойности се показват, когато избрах план за изпълнение за показване от ssms.

Но каква ще бъде стойността в кеша, нека го видим, като използваме отново заявката за кеша на плана по-горе

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

Той все още показва компилираната стойност, плюс колоната usecounts като 5--`което означава, че този план е бил използван 5 пъти и параметърът, който е бил предаден при първоначалното компилиране на плана, е 4. което също означава, че стойностите за време на изпълнение не се съхраняват в кеша подробности за плановете..

Така че в обобщение можете да получите стойности по време на изпълнение, предадени на съхранената процедура

  • 1.Стойности, които се предават, докато операторът се компилира (
    Можете да започнете да събирате тази информация за период от време и да ги регистрирате в съхранена процедура, мисля, че с течение на времето с рестартиране на сървъра, планиране на повторни компилации можете да получите нов набор на стойностите на параметрите)
  • 2. Свързването с екипа на DEV също е добър начин, тъй като те могат да ви дадат пълен списък с параметри, които могат да бъдат предадени, ако това упражнение е тромаво


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Параметър Sniffing (или Spoofing) в SQL Server

  2. SQL множество оператори LIKE

  3. Записване на ВСИЧКИ заявки в база данни на SQL Server 2008 Express?

  4. Как да използвате Stopwords и Stoplist за подобряване на пълнотекстово търсене на SQL Server (FTS)

  5. Генерирайте изрази CREATE INDEX в SQL Server