我目前正在使用
SET @startnum = 0;
SET @endnum = 10;
WITH n AS (
SELECT @startnum AS num
UNION ALL
SELECT @startnum +1 FROM n WHERE @startnum < @endnum
)
SELECT num FROM n ORDER BY num;
但我正在使用的SQL版本不支持&#34;使用table&#34;查询。
此外,我无法按功能使用row_number()
或rank_over()
分区。
答案 0 :(得分:0)
如果我需要这样一张桌子,我会做以下事情:
create table t (int col1);
insert into t values (1);
create view v as select max(col1) as mcol1 from t;
然后根据需要经常:
insert into t
select col1 + mcol1
from t, v
where col1 + mcol1 <= NUMBEROFROWSDESIRED;
这将使每次执行时的表加倍
答案 1 :(得分:0)
我对SQLYog一无所知,但它看起来像是一个MySQL工具,而不是SQL Server(这篇文章用T-SQL标记)。我也不太了解MySQL,但建议创建一个包含所需数量的永久数字表,然后就可以像这样使用它:
-- say I need the numbers 1 to 10:
SELECT N
FROM tally
WHERE N BETWEEN 1 AND 10; -- these can be variables
要创建一个,您可以使用此语法(在T-SQL或MYSql中工作):
CREATE TABLE tally (N int NOT NULL, PRIMARY KEY (N));
要填充它,你可以使用一个循环(我不推荐循环,但会在这里做一个例外,因为没有其他语法适合你):
T-SQL版本:
DECLARE @i int;
SET @i = 1;
-- T-SQL syntax
WHILE @i <= 1000 -- change this to the max number of rows that you want
BEGIN
INSERT dbo.tally VALUES (@i);
SET @i = @i+1;
END;
MySQL语法:
-- MySQL syntax
declare ii int unsigned default 1000;
declare i int unsigned default 0;
truncate table foo;
start transaction;
while i < ii do
insert into dbo.tally (N) values (i);
set i=i+1;
end while;
commit;
注意:我无法测试我的MySQL查询,因为我目前无法访问MySQL框。
答案 2 :(得分:0)
select (h*100+t*10+u+1) x from
(select 0 h union select 1 union select 2 union select 3 union select 4 union
select 5 union select 6 union select 7 union select 8 union select 9) A,
(select 0 t union select 1 union select 2 union select 3 union select 4 union
select 5 union select 6 union select 7 union select 8 union select 9) B,
(select 0 u union select 1 union select 2 union select 3 union select 4 union
select 5 union select 6 union select 7 union select 8 union select 9) C
order by x;
终于工作了!这似乎非常简单直接,我可以使用1000个数字。
如果有更好的方法,请告诉我。