{"id":792,"date":"2012-03-13T10:00:41","date_gmt":"2012-03-13T14:00:41","guid":{"rendered":"http:\/\/sqlity.net\/en\/?p=792"},"modified":"2014-11-13T13:59:31","modified_gmt":"2014-11-13T18:59:31","slug":"the-gap-in-the-identity-value-sequence","status":"publish","type":"post","link":"https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/","title":{"rendered":"The Gap in the Identity Value Sequence"},"content":{"rendered":"<div>\n<p>\nWith this blog post I am going to dive a little deeper into how SQL Server generates and handles identity values and what the implications for your code are.\n<\/p>\n<h3>Your New Identity<\/h3>\n<p>\nSQL Server manages identity values on a per table basis. Every time a new row gets inserted into a table, the current identity value for that table gets incremented and then used for the new row.<br \/>\nYou can see this in action by running the following code:\n<\/p>\n<div>\n[sql]\nIF OBJECT_ID('dbo.TableWithIdentity') IS NOT NULL DROP TABLE dbo.TableWithIdentity;<\/p>\n<p>CREATE TABLE dbo.TableWithIdentity<br \/>\n(<br \/>\n  Id INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,<br \/>\n  ExecId UNIQUEIDENTIFIER,<br \/>\n  RowId INT<br \/>\n);<\/p>\n<p>SELECT IDENT_CURRENT('dbo.TableWithIdentity') AS [IDENT_CURRENT];<br \/>\nINSERT INTO dbo.TableWithIdentity OUTPUT INSERTED.IDENTITYCOL DEFAULT VALUES;<br \/>\nSELECT IDENT_CURRENT('dbo.TableWithIdentity') AS [IDENT_CURRENT];<br \/>\nINSERT INTO dbo.TableWithIdentity OUTPUT INSERTED.IDENTITYCOL DEFAULT VALUES;<br \/>\nSELECT IDENT_CURRENT('dbo.TableWithIdentity') AS [IDENT_CURRENT];<br \/>\nINSERT INTO dbo.TableWithIdentity OUTPUT INSERTED.IDENTITYCOL DEFAULT VALUES;<br \/>\nSELECT IDENT_CURRENT('dbo.TableWithIdentity') AS [IDENT_CURRENT];<br \/>\n[\/sql]\n<\/p><\/div>\n<p>\nThe output of this query looks like this:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/03\/IDENT_CURRENT.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/03\/IDENT_CURRENT.png\" alt=\"Output of the IDENT_CURRENT example\" title=\"IDENT_CURRENT\" width=\"139\" height=\"307\" class=\"aligncenter size-full wp-image-793\" \/><\/a>\n<\/p>\n<p>\nFor rows two and three you can clearly see that the value got increased first and than used, so IDENT_CURRENT returns the last used identity value for a table. When the table was just created or truncated however, IDENT_CURRENT returns the next value, not the one that was used last. That it actually is the next value you can easily test by setting the start value of the identity column to any number other than one. <\/p>\n<p>Instead of the next value, I would have expected to see a NULL returned to indicate that no identity value had been used so far. However, that is not the case, so you need to be aware of this inconsistency of the IDENT_CURRENT function in you code.\n<\/p>\n<h3>Identity Transactions<\/h3>\n<p>\nIdentity values do not participate in any transaction in SQL Server. When a row gets inserted, an identity value gets consumed, even if that insert fails as the following demo shows.\n<\/p>\n<div>\n[sql]\nSELECT IDENT_CURRENT('dbo.TableWithIdentity') AS [IDENT_CURRENT];<br \/>\nGO<br \/>\nINSERT INTO dbo.TableWithIdentity(RowId)VALUES('NotANumber');<br \/>\nGO<br \/>\nSELECT IDENT_CURRENT('dbo.TableWithIdentity') AS [IDENT_CURRENT];<br \/>\nGO<br \/>\nINSERT INTO dbo.TableWithIdentity(RowId)VALUES('NotANumber');<br \/>\nGO<br \/>\nSELECT IDENT_CURRENT('dbo.TableWithIdentity') AS [IDENT_CURRENT];<br \/>\nGO<br \/>\nINSERT INTO dbo.TableWithIdentity(RowId)VALUES('NotANumber');<br \/>\nGO<br \/>\nSELECT IDENT_CURRENT('dbo.TableWithIdentity') AS [IDENT_CURRENT];<br \/>\n[\/sql]\n<\/div>\n<p>\nThe output will look something like this.\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/03\/IDENT_CURRENT_for_failing_insert.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/03\/IDENT_CURRENT_for_failing_insert.png\" alt=\"IDENT_CURRENT after a failing insert\" title=\"IDENT_CURRENT_for_failing_insert\" width=\"690\" height=\"360\" class=\"aligncenter size-full wp-image-796\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2012\/03\/IDENT_CURRENT_for_failing_insert.png 690w, https:\/\/sqlity.net\/wp-content\/uploads\/2012\/03\/IDENT_CURRENT_for_failing_insert-300x156.png 300w\" sizes=\"auto, (max-width: 690px) 100vw, 690px\" \/><\/a>\n<\/p>\n<p>\nNo new row made it into the table because of the conversion errors, but the identity value got increased anyway. The reason for this is simple: To implement the identity value management transactional, a session would need to take a lock on the identity value itself for the duration of the transaction. That would force all inserts to be executed consecutively and concurrency would be practically non-existent.\n<\/p>\n<p>\nThere are many reasons for which an insert could fail. Examples are an illegal value as in the above example, a deadlock, a full disk drive and so on. Some of the reasons you can control by cleaning your values prior to using them, others cannot be controlled in the inserting code at all. So you really cannot assume, that you will have a gap free list of identity values in your table.\n<\/p>\n<h3>Sequence Chasms<\/h3>\n<p>\nSQL Server does not even guarantee that the identity values used by a single insert are contiguous. To prove that run the following piece of SQL code in multiple connections at the same time.\n<\/p>\n<div>\n[sql]\nDECLARE @ExecId UNIQUEIDENTIFIER = NEWID();<br \/>\nINSERT INTO dbo.TableWithIdentity(ExecId,RowId)<br \/>\nSELECT @ExecId,n FROM dbo.GetNums(10000);<br \/>\n[\/sql]\n<\/div>\n<p><p>\nAs most of my examples, this one is also using Itzik's GetNums function that you can get here: <a href=\"http:\/\/www.sqlmag.com\/article\/sql-server\/virtual-auxiliary-table-of-numbers\" title=\"Virtual Auxiliary Table of Numbers\" target=\"_blank\">Virtual Auxiliary Table of Numbers<\/a>.\n<\/p>\n<p>\nThe easiest way to run multiple executions of this query at the same time is to use <a href=\"http:\/\/www.datamanipulation.net\/sqlquerystress\/\" title=\"SQL Query Stress by Adam Machanic\" target=\"_blank\">SQL Query Stress by Adam Machanic<\/a> as shown below.\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/03\/SQLQueryStress1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/03\/SQLQueryStress1.png\" alt=\"SQLQueryStress in action to show gaps in a single identity value run\" title=\"SQLQueryStress in action to show gaps in a single identity value run\" width=\"635\" height=\"432\" class=\"aligncenter size-full wp-image-797\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2012\/03\/SQLQueryStress1.png 635w, https:\/\/sqlity.net\/wp-content\/uploads\/2012\/03\/SQLQueryStress1-300x204.png 300w\" sizes=\"auto, (max-width: 635px) 100vw, 635px\" \/><\/a>\n<\/p>\n<p>\nAfter SQL Query Stress finishes execution, run the following query.\n<\/p>\n<div>\n[sql]\nSELECT  B.Id B_Id ,<br \/>\n        A.Id A_Id ,<br \/>\n        A.Id - B.Id Gap ,<br \/>\n        B.RowId B_RowId ,<br \/>\n        A.RowId A_RowId ,<br \/>\n        A.ExecId<br \/>\nFROM    dbo.TableWithIdentity A<br \/>\n        JOIN dbo.TableWithIdentity B ON A.ExecId = B.ExecId<br \/>\n                                        AND A.RowId = B.RowId + 1<br \/>\nWHERE   A.Id - B.Id &lt;&gt; 1<br \/>\nORDER BY A.ExecId , B_Id;<br \/>\n[\/sql]\n<\/div>\n<p>\nThis query uses a self-join on the TableWithIdentity table to return a list of all rows that have a gap between their identity value and the identity value of the preceding row of the same execution. On my system it returned about 20,000 gaps (for 200,000 inserted rows in total) with sizes from 2 to 16,000.\n<\/p>\n<p>\nThis example has shown that even in single inserts you cannot rely on getting contiguous identity values\n<\/p>\n<h3>Replication<\/h3>\n<p>\nOne final way to get gaps in your identity stream that I would like to bring up is replication. In all replication scenarios where data could flow in more that one direction, SQL Server has to manage identity ranges to prevent conflicts (see <a href=\"http:\/\/technet.microsoft.com\/en-us\/library\/ms152543.aspx\" target=\"_blank\">http:\/\/technet.microsoft.com\/en-us\/library\/ms152543.aspx<\/a>).<br \/>\nFor this, SQL Server assigns a fixed interval (per article) of identity values to each participant in the replication setup. If a participant runs out of values, a new range is automatically assigned to that participant. That new range will not be adjacent to the previous one in almost all cases, causing gaps in the list of identity values.\n<\/p>\n<p>\nThat means that even if you have a system that only ever inserts s single row at a time, has only a single connection, and never runs into an issue like a bug or a hard drive failure you still can end up with gaps in your identity value stream, if someone decides to add replication into the mix.\n<\/p>\n<h3>Conclusion<\/h3>\n<p>\nThe way identity values are handled by SQL Server, there is no guarantee that the stream of identity values for a single table is free of gaps. Even if you think you have covered all you bases, you still might end up with gaps later on, if the business suddenly requires replication to be added into the mix. Therefor it is a best practice to never rely on contiguous identity values anywhere in your code.\n<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>With this blog post I am going to dive a little deeper into how SQL Server generates and handles identity values and what the implications for your code are. Your New Identity SQL Server manages identity values on a per <a href=\"https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/\">[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,14],"tags":[],"class_list":["post-792","post","type-post","status-publish","format-standard","hentry","category-general","category-sql-server-internals"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>The Gap in the Identity Value Sequence - sqlity.net<\/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:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Gap in the Identity Value Sequence - sqlity.net\" \/>\n<meta property=\"og:description\" content=\"With this blog post I am going to dive a little deeper into how SQL Server generates and handles identity values and what the implications for your code are. Your New Identity SQL Server manages identity values on a per [more...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/\" \/>\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-03-13T14:00:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-11-13T18:59:31+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/03\/IDENT_CURRENT.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=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/792\\\/the-gap-in-the-identity-value-sequence\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/792\\\/the-gap-in-the-identity-value-sequence\\\/\"},\"author\":{\"name\":\"Sebastian Meine\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#\\\/schema\\\/person\\\/bcffd8c572bc2f1bd10fdba80135e53c\"},\"headline\":\"The Gap in the Identity Value Sequence\",\"datePublished\":\"2012-03-13T14:00:41+00:00\",\"dateModified\":\"2014-11-13T18:59:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/792\\\/the-gap-in-the-identity-value-sequence\\\/\"},\"wordCount\":1035,\"commentCount\":2,\"image\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/792\\\/the-gap-in-the-identity-value-sequence\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2012\\\/03\\\/IDENT_CURRENT.png\",\"articleSection\":[\"General\",\"SQL Server Internals\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/sqlity.net\\\/en\\\/792\\\/the-gap-in-the-identity-value-sequence\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/792\\\/the-gap-in-the-identity-value-sequence\\\/\",\"url\":\"https:\\\/\\\/sqlity.net\\\/en\\\/792\\\/the-gap-in-the-identity-value-sequence\\\/\",\"name\":\"The Gap in the Identity Value Sequence - sqlity.net\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/792\\\/the-gap-in-the-identity-value-sequence\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/792\\\/the-gap-in-the-identity-value-sequence\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2012\\\/03\\\/IDENT_CURRENT.png\",\"datePublished\":\"2012-03-13T14:00:41+00:00\",\"dateModified\":\"2014-11-13T18:59:31+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#\\\/schema\\\/person\\\/bcffd8c572bc2f1bd10fdba80135e53c\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/792\\\/the-gap-in-the-identity-value-sequence\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sqlity.net\\\/en\\\/792\\\/the-gap-in-the-identity-value-sequence\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/792\\\/the-gap-in-the-identity-value-sequence\\\/#primaryimage\",\"url\":\"http:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2012\\\/03\\\/IDENT_CURRENT.png\",\"contentUrl\":\"http:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2012\\\/03\\\/IDENT_CURRENT.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/792\\\/the-gap-in-the-identity-value-sequence\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sqlity.net\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Gap in the Identity Value Sequence\"}]},{\"@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":"The Gap in the Identity Value Sequence - sqlity.net","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\/792\/the-gap-in-the-identity-value-sequence\/","og_locale":"en_US","og_type":"article","og_title":"The Gap in the Identity Value Sequence - sqlity.net","og_description":"With this blog post I am going to dive a little deeper into how SQL Server generates and handles identity values and what the implications for your code are. Your New Identity SQL Server manages identity values on a per [more...]","og_url":"https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/","og_site_name":"sqlity.net","article_publisher":"https:\/\/www.facebook.com\/sqlity.net","article_published_time":"2012-03-13T14:00:41+00:00","article_modified_time":"2014-11-13T18:59:31+00:00","og_image":[{"url":"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/03\/IDENT_CURRENT.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":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/#article","isPartOf":{"@id":"https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/"},"author":{"name":"Sebastian Meine","@id":"https:\/\/sqlity.net\/en\/#\/schema\/person\/bcffd8c572bc2f1bd10fdba80135e53c"},"headline":"The Gap in the Identity Value Sequence","datePublished":"2012-03-13T14:00:41+00:00","dateModified":"2014-11-13T18:59:31+00:00","mainEntityOfPage":{"@id":"https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/"},"wordCount":1035,"commentCount":2,"image":{"@id":"https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/#primaryimage"},"thumbnailUrl":"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/03\/IDENT_CURRENT.png","articleSection":["General","SQL Server Internals"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/","url":"https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/","name":"The Gap in the Identity Value Sequence - sqlity.net","isPartOf":{"@id":"https:\/\/sqlity.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/#primaryimage"},"image":{"@id":"https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/#primaryimage"},"thumbnailUrl":"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/03\/IDENT_CURRENT.png","datePublished":"2012-03-13T14:00:41+00:00","dateModified":"2014-11-13T18:59:31+00:00","author":{"@id":"https:\/\/sqlity.net\/en\/#\/schema\/person\/bcffd8c572bc2f1bd10fdba80135e53c"},"breadcrumb":{"@id":"https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/#primaryimage","url":"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/03\/IDENT_CURRENT.png","contentUrl":"http:\/\/sqlity.net\/wp-content\/uploads\/2012\/03\/IDENT_CURRENT.png"},{"@type":"BreadcrumbList","@id":"https:\/\/sqlity.net\/en\/792\/the-gap-in-the-identity-value-sequence\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sqlity.net\/en\/"},{"@type":"ListItem","position":2,"name":"The Gap in the Identity Value Sequence"}]},{"@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-cM","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/posts\/792","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=792"}],"version-history":[{"count":0,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/posts\/792\/revisions"}],"wp:attachment":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/media?parent=792"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/categories?post=792"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/tags?post=792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}