SQL QUERY不会从1开始

时间:2013-10-21 05:59:12

标签: sql sql-server-2008

我得到了一个sql查询,它确实将数据存储在表中。它以数字开头。我运行它时是否有任何可能的方法。它不会从第1开始。

  
     

MISSING
        1
        2
        3
        4
        5

这就是我想要的

  
     

MISSING
        12个
        13个
        14个
        15个
        16

SELECT IDENTITY(INT,@parameter, 1) Missing
      INTO dbo.tally
      FROM master.sys.all_columns c
      CROSS JOIN master.sys.all_columns c1

1 个答案:

答案 0 :(得分:2)

如果您只想生成数字。你可以这样做:

WITH Nbrs ( n ) AS (
        SELECT 12 UNION ALL
        SELECT 1 + n FROM Nbrs WHERE n < 16 )
SELECT 
   n AS MISSING 
FROM 
   Nbrs

<强>更新

您可以通过多种方式进行计数表。最常见的情况是使用循环生成数字

此示例显示使用递归CTE生成的计数表。第一部分:

SELECT 12 UNION ALL

定义你想要启动计数表吗?第二部分:

SELECT 1 + n FROM Nbrs WHERE n < 16 )

定义是结束计数表。如果您要删除WHERE n < 16,那么将继续永久生成数字。或者它会产生最大误差。在第二部分中,我们还定义了我们希望用SELECT 1 + n增加数量的数量。如果您要将其更改为SELECT 2 + n。然后输出看起来像这样:

MISSING
12
14
16

现在因为我们用SELECT 1 + n增加了计数表并将它停在16处。输出将是:

MISSING
12
13
14
15
16

更新2

如果你想拥有更多的数字,那么300k。然后你可以设置:

OPTION ( MAXRECURSION 0 )

在查询按钮中。例如:

WITH Nbrs ( n ) AS (
        SELECT 12 UNION ALL
        SELECT 1 + n FROM Nbrs WHERE n < 1000000000 )
SELECT 
   n AS MISSING 
FROM 
   Nbrs
OPTION ( MAXRECURSION 0 )

将产生超过300k。我认为这个错误已经引入,所以你不能拥有永不结束的递归ctes。

参考文献: