J'ai une procédure stockée qui contient des déclarations SQL qui prennent des variables. Par exemple,
update customer set cust_id = @newcust_id where issuedate < @transferdate and cust_id = @oldcust_id
Les valeurs des variables sont attribuées précédemment dans le SP.
Comment montrer les valeurs de ces variables lors d'une trace de serveur?
Pour débogage des buts, vous pouvez les tracer explicitement dans le profileur à l'aide d'un événement personnalisé, via sp_trace_generateevent
:
declare @tracedata varbinary(8000);
set @tracedata = cast(@transferdate as varbinary(8000));
exec sp_trace_generateevent 82,
N'@transferdate',
@tracedata );
set @tracedata = cast(@oldcust_id as varbinary(8000));
exec sp_trace_generateevent 82,
N'@oldcust_id',
@tracedata);
Vous devez modifier votre session de profileur pour surveiller pour l'utilisateur Classe d'événement configurable par l'utilisateur , sinon vous ne verrez pas les événements générés. Je voudrais également commenter l'appel à sp_trace_generateevent
En production une fois le débogage terminé. L'appel n'est pas très coûteux (spécialement s'il n'y a pas d'écoute de surveillance pour cela), mais il ne devrait pas être supprimé non plus.
mise à jour
Le exec
appelez la prise de doigt permettant une mise en forme d'être inline dans la liste des paramètres. J'ai modifié le code pour montrer comment le jeter avant l'exécutant. La valeur sera dans la colonne BinaryData
, dans la représentation hexagone (donc 'daf'
va apparaître comme 0x646166
).
Si vous traçez, vous attrapez tous les paramètres de votre trace.
Si vous souhaitez voir la dernière entrée d'une connexion donnée à une utilisation donnée INPUTBUFFBER DBCC
Changez la procédure stockée pour les imprimer avant que la mise à jour ne fonctionne ou utilise le débogueur intégré à SSMS plutôt que le profileur.