<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: SQL SERVER &#8211; Find Gaps in The Sequence</title>
	<atom:link href="http://blog.sqlauthority.com/2009/09/06/sql-server-find-gaps-in-the-sequence/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sqlauthority.com/2009/09/06/sql-server-find-gaps-in-the-sequence/</link>
	<description>Personal Notes of Pinal Dave</description>
	<lastBuildDate>Thu, 09 Feb 2012 08:55:56 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Rajesh S</title>
		<link>http://blog.sqlauthority.com/2009/09/06/sql-server-find-gaps-in-the-sequence/#comment-62812</link>
		<dc:creator><![CDATA[Rajesh S]]></dc:creator>
		<pubDate>Fri, 12 Mar 2010 12:03:07 +0000</pubDate>
		<guid isPermaLink="false">http://blog.sqlauthority.com/?p=6723#comment-62812</guid>
		<description><![CDATA[Hi Dave,

DECLARE	@test Table(InvOID varchar(10))
INSERT INTO	@test 
		VALUES(&#039;INV0096&#039;),(&#039;INV0097&#039;),(&#039;INV0100&#039;)
DECLARE	@MinOID INT
DECLARE	@MaxOID INT

SELECT	@MinOID = MIN(CONVERT(INT,SUBSTRING(InvOID,4,4))) FROM @test
SELECT	@MaxOID = MAX(CONVERT(INT,SUBSTRING(InvOID,4,4))) FROM @test

WHILE(@MinOID &lt;= @MaxOID)
BEGIN
	IF NOT EXISTS(SELECT 1 FROM @test WHERE InvOID = &#039;INV&#039;+ RIGHT(&#039;0000&#039;+CONVERT(VARCHAR(4),@MinOID),4))
	BEGIN
		SELECT &#039;INV&#039;+CONVERT(VARCHAR(4),@MinOID)
	END
	SET @MinOID = @MinOID + 1
END
Cheers,
Rajesh S]]></description>
		<content:encoded><![CDATA[<p>Hi Dave,</p>
<p>DECLARE	@test Table(InvOID varchar(10))<br />
INSERT INTO	@test<br />
		VALUES(&#8216;INV0096&#8242;),(&#8216;INV0097&#8242;),(&#8216;INV0100&#8242;)<br />
DECLARE	@MinOID INT<br />
DECLARE	@MaxOID INT</p>
<p>SELECT	@MinOID = MIN(CONVERT(INT,SUBSTRING(InvOID,4,4))) FROM @test<br />
SELECT	@MaxOID = MAX(CONVERT(INT,SUBSTRING(InvOID,4,4))) FROM @test</p>
<p>WHILE(@MinOID &lt;= @MaxOID)<br />
BEGIN<br />
	IF NOT EXISTS(SELECT 1 FROM @test WHERE InvOID = &#039;INV&#039;+ RIGHT(&#039;0000&#039;+CONVERT(VARCHAR(4),@MinOID),4))<br />
	BEGIN<br />
		SELECT &#039;INV&#039;+CONVERT(VARCHAR(4),@MinOID)<br />
	END<br />
	SET @MinOID = @MinOID + 1<br />
END<br />
Cheers,<br />
Rajesh S</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jyoti</title>
		<link>http://blog.sqlauthority.com/2009/09/06/sql-server-find-gaps-in-the-sequence/#comment-55972</link>
		<dc:creator><![CDATA[jyoti]]></dc:creator>
		<pubDate>Fri, 18 Sep 2009 13:44:03 +0000</pubDate>
		<guid isPermaLink="false">http://blog.sqlauthority.com/?p=6723#comment-55972</guid>
		<description><![CDATA[declare
c2 cursor for select data from test 
declare
@varStrings varchar(50),
@i int
begin
open c2
fetch c2 into @varStrings
set @i=96
while @@fetch_status=0
begin
if cast(substring(@varStrings,4,4) as int)  @i
begin
select &#039;inv&#039;+cast(@i as varchar)
set @i=@i+2
end
else 
begin
set @i=@i+1
end
fetch c2 into @varStrings
end
close c2
deallocate c2
end]]></description>
		<content:encoded><![CDATA[<p>declare<br />
c2 cursor for select data from test<br />
declare<br />
@varStrings varchar(50),<br />
@i int<br />
begin<br />
open c2<br />
fetch c2 into @varStrings<br />
set @i=96<br />
while @@fetch_status=0<br />
begin<br />
if cast(substring(@varStrings,4,4) as int)  @i<br />
begin<br />
select &#8216;inv&#8217;+cast(@i as varchar)<br />
set @i=@i+2<br />
end<br />
else<br />
begin<br />
set @i=@i+1<br />
end<br />
fetch c2 into @varStrings<br />
end<br />
close c2<br />
deallocate c2<br />
end</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: K K Rakesh Varma</title>
		<link>http://blog.sqlauthority.com/2009/09/06/sql-server-find-gaps-in-the-sequence/#comment-55753</link>
		<dc:creator><![CDATA[K K Rakesh Varma]]></dc:creator>
		<pubDate>Wed, 09 Sep 2009 13:56:24 +0000</pubDate>
		<guid isPermaLink="false">http://blog.sqlauthority.com/?p=6723#comment-55753</guid>
		<description><![CDATA[declare @Org_tab table (string varchar(100))
declare @Comp_tab table (Comp_value int)
declare @min int,@max int,@i int
insert into @Org_tab
select &#039;INV0096&#039;
union all
select &#039;INV0097&#039;
union all
select &#039;INV0099&#039;
union all
select &#039;INV0100&#039;
union all
select &#039;INV0102&#039;
union all
select &#039;INV0103&#039;
set @min=(select min(cast(substring(string,4,4) as int)) from @Org_tab)
set @max=(select max(cast(substring(string,4,4) as int)) from @Org_tab)
while @min &lt;= @max
begin
insert into @Comp_tab(Comp_value) select @min
select @min = @min + 1
end
select distinct Comp_value from @Comp_tab,@Org_tab
where Comp_value not in (select cast(substring(string,4,4) as int) from @Org_tab)]]></description>
		<content:encoded><![CDATA[<p>declare @Org_tab table (string varchar(100))<br />
declare @Comp_tab table (Comp_value int)<br />
declare @min int,@max int,@i int<br />
insert into @Org_tab<br />
select &#8216;INV0096&#8242;<br />
union all<br />
select &#8216;INV0097&#8242;<br />
union all<br />
select &#8216;INV0099&#8242;<br />
union all<br />
select &#8216;INV0100&#8242;<br />
union all<br />
select &#8216;INV0102&#8242;<br />
union all<br />
select &#8216;INV0103&#8242;<br />
set @min=(select min(cast(substring(string,4,4) as int)) from @Org_tab)<br />
set @max=(select max(cast(substring(string,4,4) as int)) from @Org_tab)<br />
while @min &lt;= @max<br />
begin<br />
insert into @Comp_tab(Comp_value) select @min<br />
select @min = @min + 1<br />
end<br />
select distinct Comp_value from @Comp_tab,@Org_tab<br />
where Comp_value not in (select cast(substring(string,4,4) as int) from @Org_tab)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: fly</title>
		<link>http://blog.sqlauthority.com/2009/09/06/sql-server-find-gaps-in-the-sequence/#comment-55688</link>
		<dc:creator><![CDATA[fly]]></dc:creator>
		<pubDate>Tue, 08 Sep 2009 06:33:45 +0000</pubDate>
		<guid isPermaLink="false">http://blog.sqlauthority.com/?p=6723#comment-55688</guid>
		<description><![CDATA[sorry, 
but &lt; and &gt; disappeared
where clause 

where data is null
	and i &lt;= (select max(cast(right(data, 4) as int)) from @tbl)
	and i &gt;= (select min(cast(right(data, 4) as int)) from @tbl)]]></description>
		<content:encoded><![CDATA[<p>sorry,<br />
but &lt; and &gt; disappeared<br />
where clause </p>
<p>where data is null<br />
	and i &lt;= (select max(cast(right(data, 4) as int)) from @tbl)<br />
	and i &gt;= (select min(cast(right(data, 4) as int)) from @tbl)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: fly</title>
		<link>http://blog.sqlauthority.com/2009/09/06/sql-server-find-gaps-in-the-sequence/#comment-55687</link>
		<dc:creator><![CDATA[fly]]></dc:creator>
		<pubDate>Tue, 08 Sep 2009 06:32:09 +0000</pubDate>
		<guid isPermaLink="false">http://blog.sqlauthority.com/?p=6723#comment-55687</guid>
		<description><![CDATA[declare @tbl table (data varchar(10))
insert into @tbl
select &#039;inv0096&#039;
union all
select &#039;inv0097&#039;
union all
select &#039;inv0099&#039;
union all
select &#039;inv0100&#039;
union all
select &#039;inv0102&#039;
union all
select &#039;inv0103&#039;
union all
select &#039;inv0106&#039;
union all
select &#039;inv0110&#039;

declare @i int
select @i = 0
declare @integer table(i int)
while @i &lt; 1000
begin 
	insert into @integer(i) select @i
	select @i = @i + 1
end

select i 
from  @integer
  left join  @tbl on i = cast(right(data, 4) as int) 
where data is null 
	and i = (select min(cast(right(data, 4) as int)) from @tbl)]]></description>
		<content:encoded><![CDATA[<p>declare @tbl table (data varchar(10))<br />
insert into @tbl<br />
select &#8216;inv0096&#8242;<br />
union all<br />
select &#8216;inv0097&#8242;<br />
union all<br />
select &#8216;inv0099&#8242;<br />
union all<br />
select &#8216;inv0100&#8242;<br />
union all<br />
select &#8216;inv0102&#8242;<br />
union all<br />
select &#8216;inv0103&#8242;<br />
union all<br />
select &#8216;inv0106&#8242;<br />
union all<br />
select &#8216;inv0110&#8242;</p>
<p>declare @i int<br />
select @i = 0<br />
declare @integer table(i int)<br />
while @i &lt; 1000<br />
begin<br />
	insert into @integer(i) select @i<br />
	select @i = @i + 1<br />
end</p>
<p>select i<br />
from  @integer<br />
  left join  @tbl on i = cast(right(data, 4) as int)<br />
where data is null<br />
	and i = (select min(cast(right(data, 4) as int)) from @tbl)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ashish</title>
		<link>http://blog.sqlauthority.com/2009/09/06/sql-server-find-gaps-in-the-sequence/#comment-55655</link>
		<dc:creator><![CDATA[Ashish]]></dc:creator>
		<pubDate>Mon, 07 Sep 2009 05:58:25 +0000</pubDate>
		<guid isPermaLink="false">http://blog.sqlauthority.com/?p=6723#comment-55655</guid>
		<description><![CDATA[not the best way but this is also working 


DECLARE @Test TABLE (Data VARCHAR(10))
INSERT INTO @test
SELECT &#039;INV0096&#039;
UNION ALL
SELECT &#039;INV0097&#039;
UNION ALL
SELECT &#039;INV0099&#039;
UNION ALL
SELECT &#039;INV0100&#039;
UNION ALL
SELECT &#039;INV0102&#039;
UNION ALL
SELECT &#039;INV0103&#039;
UNION ALL
SELECT &#039;INV0106&#039;
UNION ALL
SELECT &#039;INV0110&#039;



select number from master..spt_values  where 
number not in (select right(data,4) from @test) and 
number between (select min(right(data,4)) from @test) 
and (select max(right(data,4)) from @test) and TYPE=&#039;P&#039;]]></description>
		<content:encoded><![CDATA[<p>not the best way but this is also working </p>
<p>DECLARE @Test TABLE (Data VARCHAR(10))<br />
INSERT INTO @test<br />
SELECT &#8216;INV0096&#8242;<br />
UNION ALL<br />
SELECT &#8216;INV0097&#8242;<br />
UNION ALL<br />
SELECT &#8216;INV0099&#8242;<br />
UNION ALL<br />
SELECT &#8216;INV0100&#8242;<br />
UNION ALL<br />
SELECT &#8216;INV0102&#8242;<br />
UNION ALL<br />
SELECT &#8216;INV0103&#8242;<br />
UNION ALL<br />
SELECT &#8216;INV0106&#8242;<br />
UNION ALL<br />
SELECT &#8216;INV0110&#8242;</p>
<p>select number from master..spt_values  where<br />
number not in (select right(data,4) from @test) and<br />
number between (select min(right(data,4)) from @test)<br />
and (select max(right(data,4)) from @test) and TYPE=&#8217;P&#8217;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Luca Zavarella</title>
		<link>http://blog.sqlauthority.com/2009/09/06/sql-server-find-gaps-in-the-sequence/#comment-55644</link>
		<dc:creator><![CDATA[Luca Zavarella]]></dc:creator>
		<pubDate>Sun, 06 Sep 2009 12:29:46 +0000</pubDate>
		<guid isPermaLink="false">http://blog.sqlauthority.com/?p=6723#comment-55644</guid>
		<description><![CDATA[DECLARE @Data TABLE (Datum VARCHAR(10));

INSERT INTO @Data
	SELECT &#039;INV0096&#039;
	UNION ALL
	SELECT &#039;INV0097&#039;
	UNION ALL
	SELECT &#039;INV0099&#039;
	UNION ALL
	SELECT &#039;INV0100&#039;
	UNION ALL
	SELECT &#039;INV0102&#039;
	UNION ALL
	SELECT &#039;INV0103&#039;
	UNION ALL
	SELECT &#039;INV0106&#039;
	UNION ALL
	SELECT &#039;INV0110&#039;;


WITH DataInt(Item)
AS
(
	SELECT CAST(SUBSTRING(Datum, 4, 4) AS INT)
	FROM @Data
),
	Nbrs_3( n ) AS ( SELECT 1 UNION SELECT 0 ),
	Nbrs_2( n ) AS ( SELECT 1 FROM Nbrs_3 n1 CROSS JOIN Nbrs_3 n2 ),
	Nbrs_1( n ) AS ( SELECT 1 FROM Nbrs_2 n1 CROSS JOIN Nbrs_2 n2 ),
	Nbrs_0( n ) AS ( SELECT 1 FROM Nbrs_1 n1 CROSS JOIN Nbrs_1 n2 ),
	Nbrs  ( n ) AS ( SELECT 1 FROM Nbrs_0 n1 CROSS JOIN Nbrs_0 n2 ),
Integers (n)
AS
(
	SELECT D.n
	FROM ( SELECT ROW_NUMBER() OVER (ORDER BY n)
		   FROM Nbrs ) AS D(n)
	WHERE D.n &gt;= (SELECT MIN(Item)
				  FROM DataInt)
		AND D.n &lt;= (SELECT MAX(Item)
				    FROM DataInt)
)
SELECT Integers.*
FROM DataInt
	RIGHT JOIN Integers
		ON DataInt.Item = Integers.n
WHERE DataInt.Item IS NULL]]></description>
		<content:encoded><![CDATA[<p>DECLARE @Data TABLE (Datum VARCHAR(10));</p>
<p>INSERT INTO @Data<br />
	SELECT &#8216;INV0096&#8242;<br />
	UNION ALL<br />
	SELECT &#8216;INV0097&#8242;<br />
	UNION ALL<br />
	SELECT &#8216;INV0099&#8242;<br />
	UNION ALL<br />
	SELECT &#8216;INV0100&#8242;<br />
	UNION ALL<br />
	SELECT &#8216;INV0102&#8242;<br />
	UNION ALL<br />
	SELECT &#8216;INV0103&#8242;<br />
	UNION ALL<br />
	SELECT &#8216;INV0106&#8242;<br />
	UNION ALL<br />
	SELECT &#8216;INV0110&#8242;;</p>
<p>WITH DataInt(Item)<br />
AS<br />
(<br />
	SELECT CAST(SUBSTRING(Datum, 4, 4) AS INT)<br />
	FROM @Data<br />
),<br />
	Nbrs_3( n ) AS ( SELECT 1 UNION SELECT 0 ),<br />
	Nbrs_2( n ) AS ( SELECT 1 FROM Nbrs_3 n1 CROSS JOIN Nbrs_3 n2 ),<br />
	Nbrs_1( n ) AS ( SELECT 1 FROM Nbrs_2 n1 CROSS JOIN Nbrs_2 n2 ),<br />
	Nbrs_0( n ) AS ( SELECT 1 FROM Nbrs_1 n1 CROSS JOIN Nbrs_1 n2 ),<br />
	Nbrs  ( n ) AS ( SELECT 1 FROM Nbrs_0 n1 CROSS JOIN Nbrs_0 n2 ),<br />
Integers (n)<br />
AS<br />
(<br />
	SELECT D.n<br />
	FROM ( SELECT ROW_NUMBER() OVER (ORDER BY n)<br />
		   FROM Nbrs ) AS D(n)<br />
	WHERE D.n &gt;= (SELECT MIN(Item)<br />
				  FROM DataInt)<br />
		AND D.n &lt;= (SELECT MAX(Item)<br />
				    FROM DataInt)<br />
)<br />
SELECT Integers.*<br />
FROM DataInt<br />
	RIGHT JOIN Integers<br />
		ON DataInt.Item = Integers.n<br />
WHERE DataInt.Item IS NULL</p>
]]></content:encoded>
	</item>
</channel>
</rss>

