Есть ли лучший способ генерировать диапазон чисел в SQL, чем ниже? Я использую MySql.
SELECT tens.x + ones.x + 1
FROM
(SELECT 0 x UNION ALL
SELECT 1 x UNION ALL
SELECT 2 x UNION ALL
...
SELECT 9 x ) ones
CROSS JOIN
(SELECT 0 x UNION ALL
SELECT 10 x UNION ALL
SELECT 20 x UNION ALL
...
SELECT 90 x ) tens;
Общим способом сделать это в Oracle является злоупотребление псевдономом rownum:
select rownum from all_objects where rownum<=100;
PostgreSQL позволяет использовать:
select * from generate_series(2,4);
generate_series
-----------------
2
3
4
Это специфично для механизма PostgresSQL. Но не стоит записывать хранимую процедуру для вашей базы данных.
Используя сервер Sql 2005+, вы можете использовать CTE
DECLARE @Start INT, @End INT
SELECT @Start = 0, @End = 100000
;WITH Numbers AS (
SELECT @Start Num
UNION ALL
SELECT Num + 1
FROM Numbers
WHERE Num < @End
)
SELECT *
FROM Numbers
OPTION (MAXRECURSION 0);
Почему бы не loop
? как
BEGIN
DECLARE a INT Default 0 ;
simple_loop: LOOP
SET a=a+1;
insert into mytable(id) values(a);
IF a=1000 THEN
LEAVE simple_loop;
END IF;
END LOOP simple_loop;
Изменено из Mysql For Loop
Извините меня, если синтаксис неверен, поскольку я являюсь чистым пользователем SQL SERVER (: