Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Récupérer dynamiquement les noms de paramètres et les valeurs actuelles dans la procédure stockée T-SQL

Je recherche un morceau de code standard que je peux coller dans la procédure qui peut parcourir tous les paramètres de la procédure et récupérer les valeurs actuelles transmises--

Vous pouvez obtenir toutes les valeurs transmises pour un sp en utilisant la requête ci-dessous

Exemple :
J'ai stocké ci-dessous un proc qui me donne les détails des ventes (pour la démo uniquement)

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

J'ai appelé mon sp comme ci-dessous..

exec  dbo.getsales 4

Maintenant, si je veux obtenir la valeur transmise, je peux utiliser la requête ci-dessous

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'

qui m'a montré ci-dessous comme valeur de temps de compilation

cela dit, il y a beaucoup de choses à considérer... nous pouvons utiliser des méthodes xml pour obtenir cette valeur

maintenant que se passe-t-il, si je lance à nouveau le même proc stocké pour la valeur de 2 ..

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

Un hic important ici, c'est que les valeurs ci-dessus sont affichées lorsque j'ai sélectionné le plan d'exécution à afficher à partir de ssms.

Mais quelle sera la valeur dans le cache, voyons-la en utilisant à nouveau la requête de cache du plan ci-dessus

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

Il affiche toujours la valeur compilée, plus la colonne usecounts sous la forme 5 -- "ce qui signifie que ce plan a été utilisé 5 fois et que le paramètre passé lors de la compilation initiale du plan est 4, ce qui signifie également que les valeurs d'exécution ne sont pas stockées dans le cache détails des plans..

Donc, en résumé, vous pouvez obtenir des valeurs d'exécution transmises au proc stocké

  • 1.Valeurs qui sont transmises lors de la compilation de l'instruction (
    Vous pouvez commencer à rassembler ces informations sur une période de temps et les enregistrer par rapport au proc stocké, je pense qu'au fil du temps avec les redémarrages du serveur, planifier les recompilations, vous pouvez obtenir un nouvel ensemble des valeurs de paramètres)
  • 2.Entrer en contact avec l'équipe de développement est également un bon moyen, car ils peuvent vous donner la liste complète des paramètres qui peuvent être passés, si cet exercice est compliqué