sql >> Base de Datos >  >> RDS >> Sqlserver

Recuperar dinámicamente nombres de parámetros y valores actuales dentro del procedimiento almacenado T-SQL

Estoy buscando una pieza de código estándar que pueda incluir en el procedimiento que pueda recorrer todos los parámetros del proceso y recuperar los valores actuales pasados--

Puede obtener todos los valores pasados ​​para un sp usando la consulta a continuación

Ejemplo:
Tengo un proceso almacenado a continuación que me brinda detalles de ventas (solo para demostración)

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

He llamado a mi sp como a continuación..

exec  dbo.getsales 4

Ahora, si quiero que se apruebe el valor, puedo usar la siguiente consulta

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'

que me mostró a continuación como el valor de tiempo de compilación

dicho esto, hay muchas cosas a considerar... podemos usar métodos xml para obtener este valor

ahora qué sucede, si vuelvo a ejecutar el mismo proceso almacenado por un valor de 2 ..

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

Un problema importante aquí es que los valores anteriores se muestran cuando seleccioné el plan de ejecución para mostrar desde ssms.

Pero cuál será el valor en el caché, veamos usando la consulta de caché del plan anterior nuevamente

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

Todavía muestra el valor compilado, más la columna usecounts como 5, lo que significa que este plan se ha utilizado 5 veces y el parámetro que se pasó cuando el plan se compiló inicialmente es 4, lo que también significa que los valores de tiempo de ejecución no se almacenan en caché detalles de los planes..

Entonces, en resumen, puede obtener valores de tiempo de ejecución pasados ​​al proceso almacenado

  • 1.Valores que se pasan mientras se compila la declaración (
    Puede comenzar a recopilar esta información durante un período de tiempo y registrarlos en el proceso almacenado, creo que con el tiempo con reinicios del servidor, planifique las recompilaciones, puede obtener un nuevo conjunto de valores de parámetros)
  • 2. Ponerse en contacto con el equipo DEV también es una buena manera, ya que pueden brindarle una lista total de parámetros que se pueden pasar, si este ejercicio es complicado