{"id":461,"date":"2012-12-20T21:00:00","date_gmt":"2012-12-20T21:00:00","guid":{"rendered":"\/blogs\/jonathan\/post\/Migrating-Legacy-LOB-Data-Types-to-Current-Ones-A-Big-Gotcha!.aspx"},"modified":"2017-04-13T12:13:41","modified_gmt":"2017-04-13T16:13:41","slug":"migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\/","title":{"rendered":"Migrating Legacy LOB Data Types to Current Ones &#8211; A Big Gotcha!"},"content":{"rendered":"<p>Recently, Erin (<a href=\"https:\/\/www.sqlskills.com\/blogs\/erin\/\" target=\"_blank\">Blog<\/a>|<a href=\"https:\/\/mobile.twitter.com\/erinstellato\" target=\"_blank\">Twitter<\/a>) and I encountered a bug in SQL Server that can affect some scenarios in a very negative manner.\u00a0 When working with a database that was designed in SQL Server 2000 using the legacy LOB data types, text, ntext, and image, it is possible to encounter a problem when the &#8216;text in row&#8217; table option has been configured and the data types for the columns were later migrated to the newer varchar(max), nvarchar(max), or varbinary(max) data types in SQL Server.\u00a0 If you have a table that fits the specific scenario in question, and you try to analyze the table for data compression using the sp_estimate_data_compression_savings stored procedure, the end result is a hung session with a Schema Modification lock being held in tempdb that requires a restart of the instance to clear.\u00a0 NOT GOOD!!!!!<\/p>\n<p>We were able to reproduce this problem in SQL Server and we&#8217;ve subsequently filed a bug internally with Microsoft as well.\u00a0 The good thing is that there is a work around, which I&#8217;ll cover later in this blog post, if you happen to run into this specific scenario and bug.<\/p>\n<p>To start off with, if you create a table using varchar(max) and try to use sp_tableoption to set \u2018text in row&#8217; for the table it will error out:<\/p>\n<pre class=\"brush: sql; gutter: false; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nDROP TABLE dbo.Table_1\r\n\r\nCREATE TABLE dbo.Table_1\r\n(\r\nRowID int NOT NULL,\r\nTestColumn varchar(max) NULL,\r\nOtherColumn varchar(50) NULL,\r\nChangeDate datetime NOT NULL\r\n)\r\n\r\nexec sp_tableoption 'Table_1', 'text in row', '7000';\r\n<\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\r\nMsg 2599, Level 16, State 1, Procedure sp_tableoption, Line 102\r\nCannot switch to in row text in table &quot;Table_1&quot;.\r\n<\/pre>\n<p>This is expected behavior by the Engine since the &#8216;text in row&#8217; option only applies to the legacy data types and cannot be used with the newer LOB data types in SQL Server 2005+. For these, you instead must use the &#8216;large value types out of row&#8217; option.<\/p>\n<p>However, if you have a table that was created in SQL 2000 or before, and used text, image, or ntext columns, and the &#8216;text in row option&#8217; was set:<\/p>\n<pre class=\"brush: sql; gutter: false; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nDROP TABLE dbo.Table_1\r\n\r\nCREATE TABLE dbo.Table_1\r\n(\r\nRowID int NOT NULL,\r\nTestColumn text NULL,\r\nOtherColumn varchar(50) NULL,\r\nChangeDate datetime NOT NULL\r\n)\r\n\r\nEXECUTE sp_tableoption 'Table_1', 'text in row', '7000';&lt;\/blockquote&gt;\r\n<\/pre>\n<p>and then later you upgraded to 2005+ and changed the column data type to varchar(max) or one of the other LOB data types:<\/p>\n<pre class=\"brush: sql; gutter: false; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nALTER TABLE Table_1;\r\nALTER COLUMN TestColumn varchar(max);\r\n<\/pre>\n<p>The &#8216;text in row&#8217; value remains configured for the table.<\/p>\n<pre class=\"brush: sql; gutter: false; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nSELECT text_in_row_limit\r\nFROM sys.tables\r\nWHERE name = 'Table_1';\r\n<\/pre>\n<p>If you attempt to estimate the compression for this table it will generate an error because the compression code creates a copy of the table in tempdb and tries to call sp_tableoption to set the option on the temp table used for sampling.<\/p>\n<p><strong><span style=\"color: #ff0000;\">WARNING: Running the below code\u00a0will result in a locked session that requires restarting the SQL instance to clear! DO NOT DO THIS ON A PRODUCTION SQL SERVER!<\/span><\/strong><\/p>\n<pre class=\"brush: sql; gutter: false; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nEXECUTE sp_estimate_data_compression_savings 'dbo','Table_1', 0, 1, 'row'\r\n<\/pre>\n<p>This command will result in error 2599 occurring, however, the SP doesn\u2019t handle the error correctly for some reason, and it ends up with the session waiting on a SCH-M lock in tempdb that is being blocked by itself and never goes away.\u00a0 The proc will actually complete and return the error for 2599 in SQL Server 2008 R2 + SP1, but it results in a stuck session for SQL Server 2008R2 RTM, SQL Server 2008R2 + SP2, and all versions of SQL Server 2012 that we&#8217;ve tested so far (we are waiting for further information from Microsoft at this point about why this might occur, so this may be updated in the near future, but I wouldn&#8217;t rely on this behavior currently).<br \/>\nIn addition to this, you can\u2019t clear the &#8216;text in row&#8217; value from the table because executing sp_tableoption will return the above error.\u00a0 The only work around that I&#8217;ve found so far for this issue is to add a dummy column to the table with one of the legacy types, turn off the option, and then drop the column.<\/p>\n<pre class=\"brush: sql; gutter: false; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nALTER TABLE Table_1 ADD &#x5B;dummy] text;\r\nEXECUTE sp_tableoption 'Table_1', 'text in row', 'OFF';\r\nALTER TABLE Table_1 DROP COLUMN &#x5B;dummy];\r\n<\/pre>\n<p>Once you do this, sp_estimate_data_compression_savings\u00a0 can estimate the compression savings. If you have migrated data types from legacy LOB types to the current LOB types, you should check for this scenario before attempting to run sp_estimate_data_compression_savings against the tables that changed.<\/p>\n<p>I&#8217;ve done a bit of testing and I don&#8217;t think that this problem is prevalent in SQL Server instances in the field for a couple of reasons.\u00a0 Firstly, it requires that you are attempting to estimate the compression savings for a table affected by the problem, and in my experience, data compression is not really widely used.\u00a0 Secondly, it requires that you migrated from one of the legacy LOB data types to a current one through the use of ALTER TABLE DDL explicitly (the SSMS UI will generate a script to create a new table, copy all the data into it, drop the existing tables indexes and constraints, then drop the old table, and the rename the new table to the old table name, then build all the necessary constraints and indexes, so the table option won&#8217;t be in effect after the designer based change).<\/p>\n<p>You really need the perfect storm of conditions to hit this specific problem inside of SQL Server, but it is still something to be wary of.<\/p>\n<p>Hopefully you won\u2019t hit it, but I\u2019m sure someone else will at some point.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Recently, Erin (Blog|Twitter) and I encountered a bug in SQL Server that can affect some scenarios in a very negative manner.\u00a0 When working with a database that was designed in SQL Server 2000 using the legacy LOB data types, text, ntext, and image, it is possible to encounter a problem when the &#8216;text in row&#8217; [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,19,38,39],"tags":[],"class_list":["post-461","post","type-post","status-publish","format-standard","hentry","category-compression","category-database-administration","category-sql-server-2008","category-sql-server-2012"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Migrating Legacy LOB Data Types to Current Ones - A Big Gotcha! - Jonathan Kehayias<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqlskills.com\/blogs\/jonathan\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Migrating Legacy LOB Data Types to Current Ones - A Big Gotcha! - Jonathan Kehayias\" \/>\n<meta property=\"og:description\" content=\"Recently, Erin (Blog|Twitter) and I encountered a bug in SQL Server that can affect some scenarios in a very negative manner.\u00a0 When working with a database that was designed in SQL Server 2000 using the legacy LOB data types, text, ntext, and image, it is possible to encounter a problem when the &#8216;text in row&#8217; [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/jonathan\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\/\" \/>\n<meta property=\"og:site_name\" content=\"Jonathan Kehayias\" \/>\n<meta property=\"article:published_time\" content=\"2012-12-20T21:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-04-13T16:13:41+00:00\" \/>\n<meta name=\"author\" content=\"Jonathan Kehayias\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jonathan Kehayias\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\\\/\"},\"author\":{\"name\":\"Jonathan Kehayias\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"headline\":\"Migrating Legacy LOB Data Types to Current Ones &#8211; A Big Gotcha!\",\"datePublished\":\"2012-12-20T21:00:00+00:00\",\"dateModified\":\"2017-04-13T16:13:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\\\/\"},\"wordCount\":1033,\"commentCount\":5,\"articleSection\":[\"Compression\",\"Database Administration\",\"SQL Server 2008\",\"SQL Server 2012\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\\\/\",\"url\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\\\/\",\"name\":\"Migrating Legacy LOB Data Types to Current Ones - A Big Gotcha! - Jonathan Kehayias\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#website\"},\"datePublished\":\"2012-12-20T21:00:00+00:00\",\"dateModified\":\"2017-04-13T16:13:41+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Compression\",\"item\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/category\\\/compression\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Migrating Legacy LOB Data Types to Current Ones &#8211; A Big Gotcha!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#website\",\"url\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/\",\"name\":\"Jonathan Kehayias - The Rambling DBA\",\"description\":\"The Rambling DBA\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\",\"name\":\"Jonathan Kehayias\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"caption\":\"Jonathan Kehayias\"},\"sameAs\":[\"http:\\\/\\\/3.209.169.194\\\/blogs\\\/jonathan\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Migrating Legacy LOB Data Types to Current Ones - A Big Gotcha! - Jonathan Kehayias","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:\/\/www.sqlskills.com\/blogs\/jonathan\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\/","og_locale":"en_US","og_type":"article","og_title":"Migrating Legacy LOB Data Types to Current Ones - A Big Gotcha! - Jonathan Kehayias","og_description":"Recently, Erin (Blog|Twitter) and I encountered a bug in SQL Server that can affect some scenarios in a very negative manner.\u00a0 When working with a database that was designed in SQL Server 2000 using the legacy LOB data types, text, ntext, and image, it is possible to encounter a problem when the &#8216;text in row&#8217; [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\/","og_site_name":"Jonathan Kehayias","article_published_time":"2012-12-20T21:00:00+00:00","article_modified_time":"2017-04-13T16:13:41+00:00","author":"Jonathan Kehayias","twitter_misc":{"Written by":"Jonathan Kehayias","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\/#article","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\/"},"author":{"name":"Jonathan Kehayias","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"headline":"Migrating Legacy LOB Data Types to Current Ones &#8211; A Big Gotcha!","datePublished":"2012-12-20T21:00:00+00:00","dateModified":"2017-04-13T16:13:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\/"},"wordCount":1033,"commentCount":5,"articleSection":["Compression","Database Administration","SQL Server 2008","SQL Server 2012"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\/","url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\/","name":"Migrating Legacy LOB Data Types to Current Ones - A Big Gotcha! - Jonathan Kehayias","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#website"},"datePublished":"2012-12-20T21:00:00+00:00","dateModified":"2017-04-13T16:13:41+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/migrating-legacy-lob-data-types-to-current-ones-a-big-gotcha\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/"},{"@type":"ListItem","position":2,"name":"Compression","item":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/category\/compression\/"},{"@type":"ListItem","position":3,"name":"Migrating Legacy LOB Data Types to Current Ones &#8211; A Big Gotcha!"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/","name":"Jonathan Kehayias - The Rambling DBA","description":"The Rambling DBA","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c","name":"Jonathan Kehayias","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","caption":"Jonathan Kehayias"},"sameAs":["http:\/\/3.209.169.194\/blogs\/jonathan"]}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts\/461","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/comments?post=461"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts\/461\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/media?parent=461"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/categories?post=461"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/tags?post=461"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}