我得到了一个 sql 查询,它确实将数据存储在表上。它以数字开头。当我运行这个脚本时,有什么可能的方法吗?它不会从数字 1 开始。
失踪
1
2
3
4
5
这就是我想要的
失踪
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
我得到了一个 sql 查询,它确实将数据存储在表上。它以数字开头。当我运行这个脚本时,有什么可能的方法吗?它不会从数字 1 开始。
失踪
1
2
3
4
5
这就是我想要的
失踪
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
如果您只想生成数字。你可以这样做:
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 < 16then 将永远继续生成数字。否则会引发最大递归错误。在第二部分中,我们还定义了我们希望将数字增加多少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。
参考: