我得到了一个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
答案 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。
参考文献: