{"id":976,"date":"2012-05-18T09:05:28","date_gmt":"2012-05-18T13:05:28","guid":{"rendered":"http:\/\/sqlity.net\/en\/?p=976"},"modified":"2014-11-13T13:57:44","modified_gmt":"2014-11-13T18:57:44","slug":"capturing-parameters-of-a-stored-procedure-call","status":"publish","type":"post","link":"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/","title":{"rendered":"Capturing Parameters of a Stored Procedure Call"},"content":{"rendered":"<div>\n<h3>Introduction<\/h3>\n<p>\nRecently a user on the PSSUG mailing list asked how he could capture the parameters passed to a stored procedure on every execution. In this article I would like to show a few different options to accomplish that.\n<\/p>\n<h3>Tracing<\/h3>\n<p>\nThe first option you have is to run a trace. There are two events of interest here: <span class=\"tt\">sp:starting<\/span> and <span class=\"tt\">RPC:starting<\/span>. When setting up the trace, both events can be filtered on the <span class=\"tt\">ObjectName<\/span> column to only capture calls of the procedure in question. <span class=\"tt\">sp:starting<\/span> can also be filtered on the <span class=\"tt\">ObjectId<\/span> column for the same purpose.\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/05\/procedure_execution_trace_events.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/05\/procedure_execution_trace_events.png\" alt=\"Procedure Execution Trace Events\" title=\"Procedure Execution Trace Events\" width=\"847\" height=\"536\" class=\"aligncenter size-full wp-image-978\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2012\/05\/procedure_execution_trace_events.png 847w, https:\/\/sqlity.net\/wp-content\/uploads\/2012\/05\/procedure_execution_trace_events-300x189.png 300w\" sizes=\"auto, (max-width: 847px) 100vw, 847px\" \/><\/a>\n<\/p>\n<p>\n<span class=\"tt\">sp:starting<\/span> captures the lines in the input buffer that make up the current call to the procedure. If the procedure is called directly from an application, you will be able to see that parameters in here. The <span class=\"tt\">TextData<\/span> column will contain something like this:\n<\/p>\n<p>\n<code><br \/>\nEXEC dbo.Traceable @P1 = 17, @P2 = 'StrVal1', @P3 = '2012-03-04 05:06:07.08';<br \/>\n<\/code>\n<\/p>\n<p>\nIf however the procedure gets called in a batch or from within another procedure and the parameters passed are stored in variables, you are out of luck as you will only get to see the names of those variables:\n<\/p>\n<p>\n<code><br \/>\nEXEC dbo.Traceable @P1 = @V1, @P2 = @V2, @P3 = @V3;<br \/>\n<\/code>\n<\/p>\n<p>\nThe <span class=\"tt\">RPC:starting<\/span> event fires only, if the procedure is called directly from an application. It does not fire at all when the stored procedure call is part of a batch or from within another procedure, so it does not help with the above problem either. However, it does have the advantage that it also fires, if the call from the application did not result in an execution, for example because a parameter name was messed up. In that case you will get all parameters of the erroneous call listed, again in the <span class=\"tt\">TextData<\/span> field:\n<\/p>\n<p>\n<code><br \/>\nexec dbo.Traceable @P1=19,@P2=N'StrVal4',@WrongParameter='2012-05-16 19:15:59.297'<br \/>\n<\/code>\n<\/p>\n<p>\nBecause the procedure won't start executing in this case, the <span class=\"tt\">sp:starting<\/span> event does not fire at all.\n<\/p>\n<p>\nSo both events do not cover all cases. If you are trying to see all calls to a procedure from an application, go with <span class=\"tt\">RPC:starting<\/span>. If on the other hand the procedure gets executed as part of a bigger batch or from within another procedure, use <span class=\"tt\">sp:starting<\/span> but be aware that variable usage might hide the actual parameter values from you.\n<\/p>\n<h3>Active Logging<\/h3>\n<p>\nIf the two mentioned trace events do not get you where you need to be, you have another option:<br \/>\nRename the original procedure and create a new one that first logs the parameters to a table and then calls the (renamed) original procedure.\n<\/p>\n<p>\nThe following script creates a procedure <span class=\"tt\">dbo.Traceable<\/span>. This is the procedure we want to trace. Its original behavior is to return a single result set.\n<\/p>\n<div>\n[sql]\nIF OBJECT_ID('dbo.Traceable') IS NOT NULL DROP PROCEDURE dbo.Traceable;<br \/>\nGO<\/p>\n<p>CREATE PROCEDURE dbo.Traceable<br \/>\n@P1 INT,<br \/>\n@P2 NVARCHAR(33),<br \/>\n@P3 DATETIME<br \/>\nAS<br \/>\nBEGIN<br \/>\n  SELECT @P1 [dbo.Traceable], @P2 got, @P3 [called!];<br \/>\nEND<br \/>\n[\/sql]\n<\/p><\/div>\n<p>\nTo setup logging for this procedure you can run the following script:\n<\/p>\n<div>\n[sql]\nBEGIN TRAN<\/p>\n<p>EXEC sp_rename @objname = 'dbo.Traceable', @newname = 'Traceable_Spyed';<\/p>\n<p>CREATE TABLE dbo.Traceable_Log<br \/>\n  (<br \/>\n    Id INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED ,<br \/>\n    P1 INT ,<br \/>\n    P2 NVARCHAR(33) ,<br \/>\n    P3 DATETIME ,<br \/>\n    LogDTime DATETIME2 DEFAULT SYSDATETIME()<br \/>\n  );<\/p>\n<p>GO<br \/>\nCREATE PROCEDURE dbo.Traceable<br \/>\n@P1 INT,<br \/>\n@P2 NVARCHAR(33),<br \/>\n@P3 DATETIME<br \/>\nAS<br \/>\nBEGIN<br \/>\n  INSERT  INTO dbo.Traceable_Log<br \/>\n          ( P1, P2, P3 )<br \/>\n  VALUES  ( @P1, @P2, @P3 );<\/p>\n<p>  EXEC dbo.Traceable_Spyed @P1 = @P1, @P2 = @P2, @P3 = @P3;<br \/>\nEND<br \/>\nGO<br \/>\nCOMMIT;<br \/>\n[\/sql]\n<\/p><\/div>\n<p>\nWhen modifying this script for your own purposes, make sure that the <span class=\"tt\">@newname<\/span> parameter of <span class=\"tt\">sp_rename<\/span> does not contain the schema name. Otherwise the renamed object will end up with a name like <span class=\"tt\">[dbo].[dbo.Traceable_Spyed]<\/span> which will be very inconvenient. You also might want to check that <span class=\"tt\">dbo.Traceable_Spyed<\/span> does not exist already to protect against double execution.\n<\/p>\n<p>\nWith this in place, every successful call to the procedure will get logged. The log table also establishes an execution order and has timestamps:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/05\/procedure_execution_log.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/05\/procedure_execution_log.png\" alt=\"Procedure Execution Log\" title=\"Procedure Execution Log\" width=\"565\" height=\"121\" class=\"aligncenter size-full wp-image-979\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2012\/05\/procedure_execution_log.png 565w, https:\/\/sqlity.net\/wp-content\/uploads\/2012\/05\/procedure_execution_log-300x64.png 300w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><\/a>\n<\/p>\n<p>\nTo uninstall this logging wrapper, just execute the following code:\n<\/p>\n<div>\n[sql]\nBEGIN TRAN;<br \/>\n   DROP PROCEDURE dbo.Traceable;<br \/>\n   EXEC sp_rename @objname = 'dbo.Traceable_Spyed', @newname = 'Traceable';<br \/>\nCOMMIT;<br \/>\n[\/sql]\n<\/div>\n<p>\nAgain you might want to add code to protect from double execution by checking that <span class=\"tt\">dbo.Traceable_Spyed<\/span> does exist before dropping <span class=\"tt\">dbo.Traceable<\/span>.\n<\/p>\n<h3>Alternative Solution<\/h3>\n<p>\nBoth above mentioned options have their drawbacks. The first might not capture all parameters in all cases and might therefore just not work at all for you. The second one requires that you have the ability to rename objects and replace them with your own. There might be many reasons preventing you from doing that.\n<\/p>\n<p>\nIf you are stuck because of that, there is one more option: The <span class=\"tt\">Showplan XML Statistics Profile<\/span> trace event. You can find more information about this event - including how to filter it - here: <a href=\"http:\/\/sqlity.net\/en\/952\/tracing-the-actual-execution-plan-for-a-single-query\/ \">Tracing the Actual Execution Plan for a single Query<\/a>\n<\/p>\n<p>\nThis event captures the actual execution plan of the procedure (or batch) after each single execution. The execution plans are captured in XML format and stored in the <span class=\"tt\">TextData<\/span> column. To access it from there after you inserted the trace data into a table, you have to cast the <span class=\"tt\">TextData<\/span> column to XML:\n<\/p>\n<div>\n[sql]\nSELECT CAST(TextData AS XML) ExecutionPlan FROM dbo.TraceTable;<br \/>\n[\/sql]\n<\/div>\n<p>\nInside the execution plan look for the <span class=\"tt\">ParameterList<\/span> node. It will look something like this:\n<\/p>\n<div>\n[xml]\n&lt;ParameterList&gt;<br \/>\n  &lt;ColumnReference Column=&quot;@P3&quot; ParameterCompiledValue=&quot;'2012-03-04 05:06:07.080'&quot; ParameterRuntimeValue=&quot;'2012-03-04 05:06:07.080'&quot; \/&gt;<br \/>\n  &lt;ColumnReference Column=&quot;@P2&quot; ParameterCompiledValue=&quot;N'StrVal1'&quot; ParameterRuntimeValue=&quot;N'StrVal1'&quot; \/&gt;<br \/>\n  &lt;ColumnReference Column=&quot;@P1&quot; ParameterCompiledValue=&quot;(17)&quot; ParameterRuntimeValue=&quot;(17)&quot; \/&gt;<br \/>\n&lt;\/ParameterList&gt;<br \/>\n [\/xml]\n<\/div>\n<p>\nIt does not only provide you with the parameter values of the current execution (<span class=\"tt\">ParameterRuntimeValue<\/span>), it also lists the parameter values that were used when compiling the execution plan (<span class=\"tt\">ParameterCompiledValue<\/span>). This can be very useful when you are trying to hunt down parameter sniffing issues.\n<\/p>\n<p>\nHowever, you need to be aware that this is a fairly large event. So make sure you use the server side trace functionality instead of the Profiler UI and also make sure to have enough disk space available on the drive that you are writing the trace file to. You also should set a maximum file size in the trace definition.\n<\/p>\n<p>\nHappy Tracing!\n<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Recently a user on the PSSUG mailing list asked how he could capture the parameters passed to a stored procedure on every execution. In this article I would like to show a few different options to accomplish that. <a href=\"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/\">[more&#8230;]<\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[5,22],"tags":[],"class_list":["post-976","post","type-post","status-publish","format-standard","hentry","category-general","category-tracing"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Capturing Parameters of a Stored Procedure Call - sqlity.net<\/title>\n<meta name=\"description\" content=\"This article investigates how to effectively capture the parameter values for each call to a given stored procedure.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Capturing Parameters of a Stored Procedure Call - sqlity.net\" \/>\n<meta property=\"og:description\" content=\"This article investigates how to effectively capture the parameter values for each call to a given stored procedure.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/\" \/>\n<meta property=\"og:site_name\" content=\"sqlity.net\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/sqlity.net\" \/>\n<meta property=\"article:published_time\" content=\"2012-05-18T13:05:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-11-13T18:57:44+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/05\/procedure_execution_trace_events.png\" \/>\n<meta name=\"author\" content=\"Sebastian Meine\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@sqlity\" \/>\n<meta name=\"twitter:site\" content=\"@sqlity\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sebastian Meine\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/976\\\/capturing-parameters-of-a-stored-procedure-call\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/976\\\/capturing-parameters-of-a-stored-procedure-call\\\/\"},\"author\":{\"name\":\"Sebastian Meine\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#\\\/schema\\\/person\\\/bcffd8c572bc2f1bd10fdba80135e53c\"},\"headline\":\"Capturing Parameters of a Stored Procedure Call\",\"datePublished\":\"2012-05-18T13:05:28+00:00\",\"dateModified\":\"2014-11-13T18:57:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/976\\\/capturing-parameters-of-a-stored-procedure-call\\\/\"},\"wordCount\":1092,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/976\\\/capturing-parameters-of-a-stored-procedure-call\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2012\\\/05\\\/procedure_execution_trace_events.png\",\"articleSection\":[\"General\",\"Tracing\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/sqlity.net\\\/en\\\/976\\\/capturing-parameters-of-a-stored-procedure-call\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/976\\\/capturing-parameters-of-a-stored-procedure-call\\\/\",\"url\":\"https:\\\/\\\/sqlity.net\\\/en\\\/976\\\/capturing-parameters-of-a-stored-procedure-call\\\/\",\"name\":\"Capturing Parameters of a Stored Procedure Call - sqlity.net\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/976\\\/capturing-parameters-of-a-stored-procedure-call\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/976\\\/capturing-parameters-of-a-stored-procedure-call\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2012\\\/05\\\/procedure_execution_trace_events.png\",\"datePublished\":\"2012-05-18T13:05:28+00:00\",\"dateModified\":\"2014-11-13T18:57:44+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#\\\/schema\\\/person\\\/bcffd8c572bc2f1bd10fdba80135e53c\"},\"description\":\"This article investigates how to effectively capture the parameter values for each call to a given stored procedure.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/976\\\/capturing-parameters-of-a-stored-procedure-call\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sqlity.net\\\/en\\\/976\\\/capturing-parameters-of-a-stored-procedure-call\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/976\\\/capturing-parameters-of-a-stored-procedure-call\\\/#primaryimage\",\"url\":\"http:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2012\\\/05\\\/procedure_execution_trace_events.png\",\"contentUrl\":\"http:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2012\\\/05\\\/procedure_execution_trace_events.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/976\\\/capturing-parameters-of-a-stored-procedure-call\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sqlity.net\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Capturing Parameters of a Stored Procedure Call\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/sqlity.net\\\/en\\\/\",\"name\":\"sqlity.net\",\"description\":\"Quality for SQL\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sqlity.net\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#\\\/schema\\\/person\\\/bcffd8c572bc2f1bd10fdba80135e53c\",\"name\":\"Sebastian Meine\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g\",\"caption\":\"Sebastian Meine\"},\"sameAs\":[\"http:\\\/\\\/sqlity.net\",\"https:\\\/\\\/x.com\\\/sqlity\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Capturing Parameters of a Stored Procedure Call - sqlity.net","description":"This article investigates how to effectively capture the parameter values for each call to a given stored procedure.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/","og_locale":"en_US","og_type":"article","og_title":"Capturing Parameters of a Stored Procedure Call - sqlity.net","og_description":"This article investigates how to effectively capture the parameter values for each call to a given stored procedure.","og_url":"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/","og_site_name":"sqlity.net","article_publisher":"https:\/\/www.facebook.com\/sqlity.net","article_published_time":"2012-05-18T13:05:28+00:00","article_modified_time":"2014-11-13T18:57:44+00:00","og_image":[{"url":"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/05\/procedure_execution_trace_events.png","type":"","width":"","height":""}],"author":"Sebastian Meine","twitter_card":"summary_large_image","twitter_creator":"@sqlity","twitter_site":"@sqlity","twitter_misc":{"Written by":"Sebastian Meine","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/#article","isPartOf":{"@id":"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/"},"author":{"name":"Sebastian Meine","@id":"https:\/\/sqlity.net\/en\/#\/schema\/person\/bcffd8c572bc2f1bd10fdba80135e53c"},"headline":"Capturing Parameters of a Stored Procedure Call","datePublished":"2012-05-18T13:05:28+00:00","dateModified":"2014-11-13T18:57:44+00:00","mainEntityOfPage":{"@id":"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/"},"wordCount":1092,"commentCount":0,"image":{"@id":"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/#primaryimage"},"thumbnailUrl":"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/05\/procedure_execution_trace_events.png","articleSection":["General","Tracing"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/","url":"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/","name":"Capturing Parameters of a Stored Procedure Call - sqlity.net","isPartOf":{"@id":"https:\/\/sqlity.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/#primaryimage"},"image":{"@id":"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/#primaryimage"},"thumbnailUrl":"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/05\/procedure_execution_trace_events.png","datePublished":"2012-05-18T13:05:28+00:00","dateModified":"2014-11-13T18:57:44+00:00","author":{"@id":"https:\/\/sqlity.net\/en\/#\/schema\/person\/bcffd8c572bc2f1bd10fdba80135e53c"},"description":"This article investigates how to effectively capture the parameter values for each call to a given stored procedure.","breadcrumb":{"@id":"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/#primaryimage","url":"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/05\/procedure_execution_trace_events.png","contentUrl":"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/05\/procedure_execution_trace_events.png"},{"@type":"BreadcrumbList","@id":"https:\/\/sqlity.net\/en\/976\/capturing-parameters-of-a-stored-procedure-call\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sqlity.net\/en\/"},{"@type":"ListItem","position":2,"name":"Capturing Parameters of a Stored Procedure Call"}]},{"@type":"WebSite","@id":"https:\/\/sqlity.net\/en\/#website","url":"https:\/\/sqlity.net\/en\/","name":"sqlity.net","description":"Quality for SQL","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sqlity.net\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/sqlity.net\/en\/#\/schema\/person\/bcffd8c572bc2f1bd10fdba80135e53c","name":"Sebastian Meine","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g","caption":"Sebastian Meine"},"sameAs":["http:\/\/sqlity.net","https:\/\/x.com\/sqlity"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2wXuw-fK","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/posts\/976","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/comments?post=976"}],"version-history":[{"count":0,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/posts\/976\/revisions"}],"wp:attachment":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/media?parent=976"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/categories?post=976"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/tags?post=976"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}