{"id":108077,"date":"2025-12-29T15:17:00","date_gmt":"2025-12-29T15:17:00","guid":{"rendered":"https:\/\/www.red-gate.com\/simple-talk\/?p=108077"},"modified":"2025-12-17T16:53:25","modified_gmt":"2025-12-17T16:53:25","slug":"how-to-view-sql-server-object-code-easily-with-sp_showcode","status":"publish","type":"post","link":"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/how-to-view-sql-server-object-code-easily-with-sp_showcode\/","title":{"rendered":"How to View SQL Server Object Code Easily with sp_showcode"},"content":{"rendered":"\n<p><code>sp_helptext<\/code> has served SQL Server <a href=\"https:\/\/www.red-gate.com\/blog\/the-database-professional-of-the-future-headlines-from-redgates-keynote-at-pass-data-community-summit-2025\" target=\"_blank\" rel=\"noreferrer noopener\">DBAs<\/a> for years, but it has its very obvious &#8211; and many &#8211; limitations: broken lines, missing triggers, no help with encrypted objects, to name just a few. That&#8217;s where <code>sp_showcode<\/code> comes in&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-why-dbas-need-better-code-retrieval\">Why DBAs Need Better Code Retrieval<\/h2>\n\n\n\n<p>If there&#8217;s one thing I did a lot over the years as a SQL Server DBA, it was working with the likes of <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/t-sql-programming-sql-server\/40-problems-sql-server-stored-procedure\/\" target=\"_blank\" rel=\"noreferrer noopener\">procedures<\/a> and <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/mastering-sql-views\/\" target=\"_blank\" rel=\"noreferrer noopener\">views<\/a>. Straight away with SQL Server I learned to create procedures and, later, other types of objects, such as <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/t-sql-programming-sql-server\/sql-server-functions-the-basics\/\" target=\"_blank\" rel=\"noreferrer noopener\">functions<\/a> and <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/database-administration-sql-server\/sql-server-triggers-good-scary\/\" target=\"_blank\" rel=\"noreferrer noopener\">triggers<\/a> &#8211; objects that have code saved in the database.<\/p>\n\n\n\n<p>It&#8217;s very common for those who work with these to frequently deal with the code, whether modifying it or just reading it to understand or confirm some behavior. There are those who prefer to use <a href=\"https:\/\/www.red-gate.com\/simple-talk\/opinion\/editorials\/sql-server-management-studio-is-as-relevant-as-ever\/\" target=\"_blank\" rel=\"noreferrer noopener\">SQL Server Management Studio<\/a>, navigate the hierarchical structure, right-click and open it. <\/p>\n\n\n\n<p>And, there are those &#8211; like myself &#8211; who prefer to display the text directly from the code window with the famous <a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/relational-databases\/system-stored-procedures\/sp-helptext-transact-sql?view=sql-server-ver17\" target=\"_blank\" rel=\"noreferrer noopener\"><code>sp_helptext<\/code><\/a>, which I find much faster than using the interface, as demonstrated below:<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"902\" style=\"aspect-ratio: 1868 \/ 902;\" width=\"1868\" controls src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/Video1-1.mp4\"><\/video><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"976\" style=\"aspect-ratio: 1294 \/ 976;\" width=\"1294\" controls src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/Video2-sp_helptext-1.mp4\"><\/video><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-limitations-of-sp-helptext-in-sql-server\">Limitations of sp_helptext in SQL Server<\/h2>\n\n\n\n<p><a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/relational-databases\/system-stored-procedures\/sp-helptext-transact-sql?view=sql-server-ver17\" target=\"_blank\" rel=\"noreferrer noopener\"><code>sp_helptext<\/code><\/a> originally returns the code as one column in multiple lines, whereby each line is a line of the source code. If you copy and paste directly into SSMS, you lose formatting. To bypass this, you can activate text mode in SSMS (shortcut CTRL+T) and&nbsp;<em>voil\u00e0: <\/em>your proc, however complex it may be, returns with the correct formatting and is much easier to copy&#8230;in <em>most <\/em>cases!<\/p>\n\n\n\n<p>This is because, occasionally, the lines may be broken, or in the wrong place, and the column header <em>Text <\/em>comes along. In 99% of cases it&#8217;s still very useful, and I think it&#8217;s better than looking for it in the interface, but its limitations don&#8217;t stop there:<\/p>\n\n\n<div class=\"block-core-list\">\n<ul class=\"wp-block-list\">\n<li>I need to know exactly what I&#8217;m looking for. If I only know part of the object&#8217;s name, I need to go to <code>sys.objects<\/code> or <code>sys.procedures<\/code>, find the exact name, and then call <code>sp_helptext<\/code> or use a function like the <a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/t-sql\/functions\/object-definition-transact-sql?view=sql-server-ver17\" target=\"_blank\" rel=\"noreferrer noopener\">Object Definition<\/a>.<br><br><\/li>\n\n\n\n<li>Another pain is that it doesn&#8217;t decrypt by itself even if it&#8217;s a <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/database-administration-sql-server\/sql-server-security-fixed-server-and-database-roles\/#:~:text=Description-,sysadmin,-Members%20of%20the\" target=\"_blank\" rel=\"noreferrer noopener\">sysadmin<\/a>, or if I&#8217;m connected as a Dedicated Admin (<a href=\"https:\/\/www.sqlshack.com\/sql-server-dedicated-admin-connection-dac-how-to-enable-connect-and-use\/\" target=\"_blank\" rel=\"noreferrer noopener\">DAC<\/a>).<br><br><\/li>\n\n\n\n<li>And, if I want DDL Triggers, logon trigger? Forget it &#8211; <code>sp_helptext<\/code> won&#8217;t find it!<\/li>\n<\/ul>\n<\/div>\n\n\n<p>This is where I present to you an evolution after using <code>sp_helptext<\/code> so much in my life: <a href=\"https:\/\/github.com\/rrg92\/sqlserver-lib\/blob\/main\/Modulos\/sp.showcode.sql\" target=\"_blank\" rel=\"noreferrer noopener\"><code>sp_showcode<\/code><\/a><\/p>\n\n\n\n<p>Let&#8217;s take a closer look at it.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"h-introducing-sp-showcode-the-evolution-of-sp-helptext-in-sql-server\">Introducing sp_showcode: The Evolution of sp_helptext in SQL Server<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-automatic-text-output\">Automatic Text Output<\/h3>\n\n\n\n<p>With <code>sp_helptext<\/code>, if I ask to display the code for the procedure <code>MyProc<\/code>, it will display it like this by default:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \">sp_helptext MyProc <\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"666\" height=\"449\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-16.png\" alt=\"What the code for the procedure 'MyProc' looks like when displayed by default.\" class=\"wp-image-108080\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-16.png 666w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-16-300x202.png 300w\" sizes=\"auto, (max-width: 666px) 100vw, 666px\" \/><\/figure>\n\n\n\n<p>Note that it is a table with 1 column called Text, and the result. If I want to display it as text, I press the option in SSMS (or use the shortcut CTRL+T) and:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"535\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-17-1024x535.png\" alt=\"What happens when the 'text' option is selected in SSMS.\" class=\"wp-image-108081\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-17-1024x535.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-17-300x157.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-17-768x402.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-17.png 1090w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em>Despite the formatting seeming okay, there&#8217;s still the header with the text \u201ctext\u201d which, if copied, you need to remove. It seems like a small thing but for someone who does it a lot, it gets repetitive.<\/em><\/figcaption><\/figure>\n\n\n\n<p>Thus the formatting is maintained, but not everything is rosy. This is a more bizarre case, using <code>stpPowerAlert_Log_Full<\/code>, a standard procedure from the <a href=\"https:\/\/poweralerts.com.br\/\" target=\"_blank\" rel=\"noreferrer noopener\">Power Alerts<\/a> which warns about the use of logs:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"560\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-18-1024x560.png\" alt=\"An image showing the sp_helptext breaking a line where it shouldn't have.\" class=\"wp-image-108082\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-18-1024x560.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-18-300x164.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-18-768x420.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-18.png 1051w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em><code>sp_helptext<\/code> ended up breaking a line where it shouldn&#8217;t have.<\/em><\/figcaption><\/figure>\n\n\n\n<p><code>sp_showcode<\/code> comes with several improvements here, the first being that you don&#8217;t need to enable SSMS text mode:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"421\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-19-1024x421.png\" alt=\"Image showing that, even with the default Grid option enabled, sp_showcode sent it to the text output.\" class=\"wp-image-108083\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-19-1024x421.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-19-300x123.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-19-768x316.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-19.png 1090w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em>Note that, even with the default Grid option enabled, <code>sp_showcode<\/code> sent it to the text output<\/em>.<\/figcaption><\/figure>\n\n\n\n<p>And it keeps the formatting identical:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"465\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-20-1024x465.png\" alt=\"Image showing that the line remained exactly as it was created.\" class=\"wp-image-108084\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-20-1024x465.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-20-300x136.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-20-768x349.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-20.png 1090w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em>The line remained exactly as created<\/em>.<\/figcaption><\/figure>\n\n\n\n<p>Note that it has everything there to make it easy to copy. There&#8217;s only one disadvantage: the maximum line length is 4000 characters (<code>sp_helptext<\/code> tries to circumvent this problem but makes the situation worse). <\/p>\n\n\n\n<p>If you have an object with code that has a line with more than 4000 characters, <s>see a doctor<\/s>, <code>sp_showcode<\/code> will go to the next line and it&#8217;ll be different from the original. But, in over 10 years as a DBA, I don&#8217;t think I&#8217;ve ever seen code with such a long line &#8211; not even the internal procs created by Microsoft.<\/p>\n\n\n\n<p><em>Between us, if someone crammed more than 4000 characters into a single line, it&#8217;s because they don&#8217;t want you to easily read that proc!<\/em><\/p>\n\n\n\n<section id=\"my-first-block-block_07a4e6758b2fc4fc945a0d97301f195c\" class=\"my-first-block alignwide\">\n    <div class=\"bg-brand-600 text-base-white py-5xl px-4xl rounded-sm bg-gradient-to-r from-brand-600 to-brand-500 red\">\n        <div class=\"gap-4xl items-start md:items-center flex flex-col md:flex-row justify-between\">\n            <div class=\"flex-1 col-span-10 lg:col-span-7\">\n                <h3 class=\"mt-0 font-display mb-2 text-display-sm\">Want more hands-on help with your SQL Server?<\/h3>\n                <div class=\"child:last-of-type:mb-0\">\n                                            SQL Toolbelt Essentials includes 10 ingeniously simple tools that cover your entire database development lifecycle. With no complex set up required, your team can start seeing results immediately.                                    <\/div>\n            <\/div>\n                                            <a href=\"https:\/\/www.red-gate.com\/products\/sql-toolbelt-essentials\/\" class=\"btn btn--secondary btn--lg\" aria-label=\"Learn more &amp; try for free: Want more hands-on help with your SQL Server?\">Learn more &amp; try for free<\/a>\n                    <\/div>\n    <\/div>\n<\/section>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-using-xml-mode-with-sp-showcode-for-easy-copying-in-sql-server\">Using XML Mode with sp_showcode for Easy Copying in SQL Server<\/h3>\n\n\n\n<p>If you still don&#8217;t want text output for these cases, you can switch to <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/learn\/the-xml-methods-in-sql-server\/\" target=\"_blank\" rel=\"noreferrer noopener\">XML<\/a>:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \">sp_showcode MyProc,\u2019xml\u2019<\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"395\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-21-1024x395.png\" alt=\"Image showing that, if you still don't want text output for these cases, you can switch to XML.\" class=\"wp-image-108085\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-21-1024x395.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-21-300x116.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-21-768x296.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-21.png 1073w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Clicking on the returned <code>ObjectDefinition<\/code> column opens a new tab:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"314\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-22-1024x314.png\" alt=\"Image showing that clicking on the returned ObjectDefinition column opens a new tab.\" class=\"wp-image-108086\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-22-1024x314.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-22-300x92.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-22-768x235.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-22.png 1090w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em>Just copy and paste into a SQL tab. This is the same behavior as <code>sp_whoisactive<\/code><\/em>.<\/figcaption><\/figure>\n\n\n\n<p>In this mode, you&#8217;ll only have problems if you use an invalid XML character; the procedure attempts to replace the most probable invalid characters with \u201c?\u201d, but there might be some that we haven&#8217;t mapped. <\/p>\n\n\n\n<p>However, these are generally invisible control characters, so you&#8217;ll hardly use them in the procedure. If you encounter this problem, report the invalid character as an issue in my git repo (if possible), so we can think about improvements. Again, this is a problem that will only occur with XML output.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-search-by-partial-object-name-in-sql-server\">Search by Partial Object Name in SQL Server<\/h3>\n\n\n\n<p>It&#8217;s quite common to work with several procedures in a project, such as <code>prcGetSales<\/code> or <code>prcNewSale<\/code>. Sometimes you don&#8217;t remember the exact name (due to working with so many) and need to consult before using <code>sp_helptext<\/code>, which only accepts the full name. With <code>sp_showcode<\/code>, you can use % to perform a <code><a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/t-sql\/language-elements\/like-transact-sql?view=sql-server-ver17\" target=\"_blank\" rel=\"noreferrer noopener\">LIKE<\/a><\/code>:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \">sp_showcode '%Sales%'<\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"579\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-23-1024x579.png\" alt=\"An image showing the use of % to perform a LIKE.\" class=\"wp-image-108087\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-23-1024x579.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-23-300x169.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-23-768x434.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-23.png 1039w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em>Before <code>sp_showcode<\/code>, I would do a select * from <code>sys.objects<\/code> with a name like &#8216;%sale%&#8217;, analyze the result, and only then use <code>sp_helptext<\/code>. Now, with <code>sp_showcode<\/code>, everything is right there!<\/em><\/figcaption><\/figure>\n\n\n\n<p>When you specify % and <code>sp_showcode<\/code> finds more than one option, it understands that you don&#8217;t know what you want and simply shows you <em>all<\/em> the options. However, you can prevent this by copying the correct name, or changing some parameters which alters this behavior. In <code>sp_helptext<\/code>, though, you <em>cannot<\/em> do this.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"395\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-24-1024x395.png\" alt=\"An image showing that, in sp_helptext, you cannot prevent it showing you every single option when you specify %.\" class=\"wp-image-108088\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-24-1024x395.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-24-300x116.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-24-768x296.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-24.png 1090w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-multi-database-search-using-sp-showcode-in-sql-server\">Multi-Database Search using sp_showcode in SQL Server<\/h3>\n\n\n\n<p>By default, <code>sp_showcode<\/code> only searches for objects in the current database (again, to avoid causing too much processing). But, you can search in other databases:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \">sp_showcode '%..%Sale%'<\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"529\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-25-1024x529.png\" alt=\"An image showing how you can search for objects in other databases.\" class=\"wp-image-108089\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-25-1024x529.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-25-300x155.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-25-768x397.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-25.png 1090w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>By using the <em>%<\/em> filter, you specify that you want to look in other databases beyond the current one. Note that in the image above, <code>sysalerts_performance_counters_view<\/code> was correctly returned because of the sale string in <code>sysalerts<\/code>; you can filter this out while reviewing the results.<\/p>\n\n\n\n<p>You can also filter specific databases. For example, suppose you have databases in the format <code>StoreNNNN<\/code>, where <code>NNNN<\/code> is a store code:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \">sp_showcode 'Store10%..%Sale%'<\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"585\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-26-1024x585.png\" alt=\"An image showing filtering the database procedures of Stores starting with 10.\" class=\"wp-image-108090\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-26-1024x585.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-26-300x171.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-26-768x439.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-26.png 1090w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em>Filtering the database procedures of Stores starting with 10<\/em>.<\/figcaption><\/figure>\n\n\n\n<p>If you want to display the text for all, use <code>@all = 1<\/code>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"949\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-27-1024x949.png\" alt=\"An image showing using @all = 1 to display the text for all.\" class=\"wp-image-108091\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-27-1024x949.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-27-300x278.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-27-768x712.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-27.png 1090w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>And use the following if you want to display it as a clickable XML in SSMS:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \">sp_showcode 'Store10%..%Sale%','xml', @all = 1<\/pre><\/div>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"954\" style=\"aspect-ratio: 1166 \/ 954;\" width=\"1166\" controls src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/video3.mp4\"><\/video><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-sp-showcode-in-sql-server-automatic-decryption-for-encrypted-procedures\">sp_showcode in SQL Server: Automatic Decryption for Encrypted Procedures<\/h3>\n\n\n\n<p>Have you tried to view the code of an encrypted procedure with <code>sp_helptext<\/code>?<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \">sp_helptext spencrypted<\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"876\" height=\"498\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-28.png\" alt=\"An image showing an attempt to view the code of an encrypted procedure with sp_helptext.\" class=\"wp-image-108092\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-28.png 876w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-28-300x171.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-28-768x437.png 768w\" sizes=\"auto, (max-width: 876px) 100vw, 876px\" \/><\/figure>\n\n\n\n<p>If so, you would have noticed that, even if you have DAC (a special connection that a sysadmin can open and can access internal SQL tables), you&#8217;re presented with this error:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \">declare @IsAdmin varchar(1)\nselect @IsAdmin = ep.is_admin_endpoint from sys.dm_exec_connections c\njoin sys.endpoints ep on ep.endpoint_id = c.endpoint_id\nwhere session_id = @@spid\nprint 'Is Admin Endpoint (dac)? ' + @IsAdmin\nGO \n\nsp_helptext spencrypted<\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"400\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-29-1024x400.png\" alt=\"An image showing the error.\" class=\"wp-image-108093\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-29-1024x400.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-29-300x117.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-29-768x300.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-29.png 1090w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>However, with <code>sp_showcode<\/code>, if you&#8217;re connected as DAC it&#8217;ll automatically decrypt the proc:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \">declare @IsAdmin varchar(1)\nselect @IsAdmin = ep.is_admin_endpoint from sys.dm_exec_connections c\njoin sys.endpoints ep on ep.endpoint_id = c.endpoint_id\nwhere session_id = @@spid\nprint 'Is Admin Endpoint (dac)? ' + @IsAdmin\nGO \n\nsp_showcode spencrypted<\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"597\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-30-1024x597.png\" alt=\"An image showing how, with sp_showcode, it'll automatically decrypt the proc if you're connected as DAC.\" class=\"wp-image-108094\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-30-1024x597.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-30-300x175.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-30-768x448.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-30.png 1090w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>On the other hand, if it&#8217;s <em>not<\/em> set as DAC, you&#8217;ll see this warning:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"489\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-31-1024x489.png\" alt=\"An image showing the warning you'll receive if you're not connected to sp_showcode with DAC.\" class=\"wp-image-108095\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-31-1024x489.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-31-300x143.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-31-768x367.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-31.png 1039w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>It&#8217;s worth remembering that only sysadmins can connect as DAC &#8211; another convenience for a DBA who may be investigating something or needs to recover procs created by someone no longer working for the organization. <\/p>\n\n\n\n<p>They would still be able to do this <em>without<\/em> <code>sp_showcode<\/code>, but it&#8217;s more work. <em>With <\/em><code>sp_showcode<\/code>, the &#8216;biggest&#8217; hurdle is simply opening a DAC connection.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-sp-showcode-in-sql-server-support-for-ddl-triggers\">sp_showcode in SQL Server: Support for DDL Triggers<\/h3>\n\n\n\n<p><code>sp_helptext<\/code> doesn&#8217;t display another common type of SQL Server object: <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/database-administration-sql-server\/sql-server-triggers-good-scary\/#:~:text=DDL%20(data%20definition%20language)%20triggers\" target=\"_blank\" rel=\"noreferrer noopener\">DDL triggers<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \">sp_helptext ddl_trig_database<\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"365\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-32-1024x365.png\" alt=\"An image showing how sp_helptext doesn't display DDL triggers.\" class=\"wp-image-108096\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-32-1024x365.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-32-300x107.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-32-768x273.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-32.png 1090w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>With <code>sp_showcode<\/code>, just do what you learned above &#8211; pass the name (or part of it) and it will produce:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \">sp_showcode ddl_trig_database<\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"781\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-33-1024x781.png\" alt=\"An image showing what's produced with sp_showcode\" class=\"wp-image-108097\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-33-1024x781.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-33-300x229.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-33-768x586.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-33.png 1090w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>And remember: if you don&#8217;t recall the exact name, or even the bank, just use % to search.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-how-to-filter-multiple-options-with-the-exception-of-others\">How to Filter Multiple Options with the Exception of Others<\/h3>\n\n\n\n<p>Another great feature is to filter multiple options with the exception of others. <em>Yes, this is copied from <a href=\"https:\/\/ola.hallengren.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Ola&#8217;s maintenance procedures<\/a>, because I find it a very valuable resource!<\/em><\/p>\n\n\n\n<p>For example: suppose you want to find all objects, across all databases, containing &#8216;sale&#8217; in the name &#8211; <em>except<\/em> those in the msdb or those that contain &#8216;report&#8217; in the name. This is impossible with <code>sp_helptext<\/code>, but entirely doable with <code>sp_showcode<\/code>, as follows:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \">sp_showcode '%.%.%sale%,-msdb.%.%,-%.%.%report%','xml',@all = 1<\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"479\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-34-1024x479.png\" alt=\"Image showing the ability to find all objects, across all databases, with 'sp_showcode'\" class=\"wp-image-108098\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-34-1024x479.png 1024w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-34-300x140.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-34-768x359.png 768w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2025\/12\/image-34.png 1090w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Remember, there are multiple procs, including in <a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/relational-databases\/databases\/msdb-database?view=sql-server-ver17\" target=\"_blank\" rel=\"noreferrer noopener\">msdb<\/a>. So, in the last example, I&#8217;ll demonstrate how you can use negative filters with wildcards to your advantage.<\/p>\n\n\n\n<p>In this case, I used the comma to specify multiple options, and the second one is a negation (starts with a -). The other parameters simply displayed their results as XML. To do this without <code>sp_showcode<\/code>, you&#8217;d spend a lot of time building your queries and looking in various databases.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-sp-showcode-a-must-have-tool-for-sql-server-dbas\">sp_showcode: A Must-Have Tool for SQL Server DBAs<\/h3>\n\n\n\n<p>I created <code>sp_showcode<\/code> primarily to be used as an auxiliary procedure, especially with Management Studio. But, if you want more advanced scenarios, you have total control over the result with the other parameters. <\/p>\n\n\n\n<p>For example, the export mode returns the original definition of each procedure found, and you can use it to read in your application, or a PowerShell script, etc. You can also remove the headers, and more. <\/p>\n\n\n\n<p>So, although the main use is to facilitate daily life in SSMS, it can still be useful for backing up several procedures such as:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \">sqlcmd -S .\\a25 -d Db1 -y 0 -Q \"sp_showcode '%','exportgo',@all = 1, @type = 'proc,function,view,trigger' \u2013 export all user modules found in database\"<\/pre><\/div>\n\n\n\n<p>There are many other parameters there, and I&#8217;ve left a small documentation inside the procedure script and examples of how to use them. I invite you to explore it!<\/p>\n\n\n\n<p>I am still using, testing, and adjusting it, so it may contain errors and even some performance issues in more extreme cases (e.g. when using wildcard and databases filtered contains multiple objects). <\/p>\n\n\n\n<p>So, if you use it in production, be careful and monitor consumption. The more search options you provide, the more work it will have, and consequently, depending on the number of databases and objects, it may take longer. But, over time, I believe I will make it better and more efficient. <\/p>\n\n\n\n<p>For years, whenever I needed to do these things, I spent a lot of time looking for the object and opening or writing the query in internal tables. It may seem like a small amount but, when you work with a lot of code, these small shortcuts can save you a great deal of time. <\/p>\n\n\n\n<p>The overall objective of the proc is to make it easier to access the code of the objects, with more flexibility in how you do so. Going forward, I plan to add other types &#8211; such as Jobs &#8211; and allow advanced searches. Who knows, maybe even using natural language?<\/p>\n\n\n\n<p>The procedure is free and available now in my SQL Scripts repository: <a href=\"https:\/\/github.com\/rrg92\/sqlserver-lib\/blob\/main\/Modulos\/sp.showcode.sql\" target=\"_blank\" rel=\"noreferrer noopener\">sqlserver-lib\/Modulos\/sp.showcode.sql at main \u00b7 rrg92\/sqlserver-lib<\/a>.<\/p>\n\n\n\n<p>If you have suggestions or discover problems, please submit these and I will review them when I have time. Additionally, feel free to leave comments and feedback down below!<\/p>\n\n\n\n<section id=\"faq\" class=\"faq-block my-5xl\">\n    <h2>FAQs: sp_showcode in SQL Server<\/h2>\n\n                        <h3 class=\"mt-4xl\">1. What is sp_showcode in SQL Server?<\/h3>\n            <div class=\"faq-answer\">\n                <p><code>sp_showcode<\/code> is a custom procedure that retrieves SQL object code with better formatting, search flexibility, and decryption support compared to <code>sp_helptext<\/code>.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">2. How is sp_showcode different from sp_helptext in SQL Server?<\/h3>\n            <div class=\"faq-answer\">\n                <p>Unlike <code>sp_helptext<\/code>, <code>sp_showcode<\/code> offers XML output, partial name search, multi-database queries, and automatic decryption for encrypted objects.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">3. Can sp_showcode display DDL triggers in SQL Server?<\/h3>\n            <div class=\"faq-answer\">\n                <p>Yes, <code>sp_showcode<\/code> supports DDL triggers, while <code>sp_helptext<\/code> does not.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">4. Does sp_showcode in SQL Server require special permissions?<\/h3>\n            <div class=\"faq-answer\">\n                <p>For encrypted objects in SQL Server, you&#8217;ll need a DAC connection and sysadmin rights. For regular objects, standard permissions apply.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">5. Where can I get sp_showcode for SQL Server?<\/h3>\n            <div class=\"faq-answer\">\n                <p><code>sp_showcode<\/code> is\u00a0free and available now in my SQL Scripts repository: <a href=\"https:\/\/github.com\/rrg92\/sqlserver-lib\/blob\/main\/Modulos\/sp.showcode.sql\" target=\"_blank\" rel=\"noreferrer noopener\">sqlserver-lib\/Modulos\/sp.showcode.sql at main \u00b7 rrg92\/sqlserver-lib<\/a><\/p>\n            <\/div>\n            <\/section>\n\n\n\n<section id=\"my-first-block-block_ef2306ed2f7d5a1e9dce8fd18d980d89\" class=\"my-first-block alignwide\">\n    <div class=\"bg-brand-600 text-base-white py-5xl px-4xl rounded-sm bg-gradient-to-r from-brand-600 to-brand-500 red\">\n        <div class=\"gap-4xl items-start md:items-center flex flex-col md:flex-row justify-between\">\n            <div class=\"flex-1 col-span-10 lg:col-span-7\">\n                <h3 class=\"mt-0 font-display mb-2 text-display-sm\">Subscribe to the Simple Talk newsletter<\/h3>\n                <div class=\"child:last-of-type:mb-0\">\n                                            Get selected articles, event information, podcasts and other industry content delivered straight to your inbox every two weeks.                                    <\/div>\n            <\/div>\n                                            <a href=\"https:\/\/www.red-gate.com\/simple-talk\/subscribe\/\" class=\"btn btn--secondary btn--lg\" aria-label=\"Subscribe now: Subscribe to the Simple Talk newsletter\">Subscribe now<\/a>\n                    <\/div>\n    <\/div>\n<\/section>","protected":false},"excerpt":{"rendered":"<p>Discover how sp_showcode improves SQL Server code viewing compared to sp_helptext, with better formatting, search, and decryption.&hellip;<\/p>\n","protected":false},"author":170434,"featured_media":108107,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[143523,53,143524],"tags":[4150,4151],"coauthors":[21049],"class_list":["post-108077","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-databases","category-featured","category-sql-server","tag-sql","tag-sql-server"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/108077","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/users\/170434"}],"replies":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/comments?post=108077"}],"version-history":[{"count":7,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/108077\/revisions"}],"predecessor-version":[{"id":108113,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/108077\/revisions\/108113"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/media\/108107"}],"wp:attachment":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/media?parent=108077"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/categories?post=108077"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/tags?post=108077"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/coauthors?post=108077"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}