Sql server 在表中生成固定数量的行
无法正确回答问题,因此无法搜索我想要的内容。我所需要的只是一个虚拟表,其中有一列say guid,我将其用于其他目的。没有写同样的插入语。。newID n次,想知道是否有一个优雅的解决方案 类似的问题是,如何用int列(比如1-n个数字)填充空白表Sql server 在表中生成固定数量的行,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,无法正确回答问题,因此无法搜索我想要的内容。我所需要的只是一个虚拟表,其中有一列say guid,我将其用于其他目的。没有写同样的插入语。。newID n次,想知道是否有一个优雅的解决方案 类似的问题是,如何用int列(比如1-n个数字)填充空白表 Row1: 1 Row2: 2 ....... Row100:100 你可以递归地做 对于数字,例如: WITH r AS ( SELECT 1 AS n UNION ALL SELECT n+1 FROM r WHERE
Row1: 1
Row2: 2
.......
Row100:100
你可以递归地做 对于数字,例如:
WITH r AS (
SELECT 1 AS n
UNION ALL
SELECT n+1 FROM r WHERE n+1<=100
)
SELECT * FROM r
单向
;with guids( i, guid ) as
(
select 1 as i, newid()
union all
select i + 1, newid()
from guids
where i < 100
)
select guid from guids option (maxrecursion 100)
与递归CTE不同,我建议对任何已知已超过100行的对象使用基于集合的方法
--INSERT dbo.newtable(ID, GUID)
SELECT TOP (100) ROW_NUMBER() OVER (ORDER BY [object_id]), NEWID()
FROM sys.all_columns ORDER BY [object_id];
有关大量其他想法,请参阅本系列:
这种方法非常快。如果您需要从无到有地生成一个数字表,这可能是最好的方法
WITH
t0(i) AS (SELECT 0 UNION ALL SELECT 0),
t1(i) AS (SELECT 0 FROM t0 a, t0 b),
t2(i) AS (SELECT 0 FROM t1 a, t1 b),
t3(i) AS (SELECT 0 FROM t2 a, t2 b),
n(i) AS (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 0)) FROM t3)
SELECT i FROM n WHERE i BETWEEN 1 AND 100
只是添加了这个,因为它没有列出: 获取10行的快速方法:
SELECT ROW_NUMBER() OVER(
ORDER BY N1.N)
, LOWER(NEWID())
FROM (VALUES(1), (1), (1), (1), (1), (1), (1), (1), (1), (1)) AS N1(N) -- 10
如果希望它基于变量,请执行以下操作:
DECLARE @N int = 10;
WITH Numbers(number)
AS (SELECT ROW_NUMBER() OVER(
ORDER BY N1.N)
FROM (VALUES(1), (1), (1), (1), (1), (1), (1), (1), (1), (1)) AS N1(N) -- 10
CROSS JOIN(VALUES(1), (1), (1), (1), (1), (1), (1), (1), (1), (1)) AS N2(N)-- 100
--CROSS JOIN (VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) AS N3 (N) -- 1,000
--CROSS JOIN (VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) AS N4 (N) -- 10,000
--CROSS JOIN (VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) AS N5 (N) -- 100,000
-- Etc....
)
SELECT *
, LOWER(NEWID())
FROM Numbers
WHERE number <= @N;
请看前面的问题:请看这个问题:关于数字表我不确定每次执行调用2.7毫秒的速度是否会快得惊人,相比之下,本页上其他更简单的变体的调用速度为3.1毫秒,但确定在测试时也不要忘了生成GUID:-不适用于101行及以上-默认CTE嵌套限制