MsSQL wygenerowanie wszystkich kombinacji czasu

0

Hej
Będę miał taką tabelę:

CREATE TABLE Time(
	id INTEGER IDENTITY(1,1) PRIMARY KEY,
	hour INTEGER NOT NULL,
	minute INTEGER NOT NULL,
	second INTEGER NOT NULL
);

Do tego dojdzie jeszcze jedno pole opisowe, ale to sobie sam z tym poradzę.
Chcę za pomocą skryptu .sql wygenerować wszystkie kombinacje od 000 do 2359.
Udało mi się to zrobić 3 pętlami while, wygląda tragicznie, działa niezbyt szybko, ale działa (no i wstawia po kolei, co też jest spoko)

DECLARE @CurrentHour INT = 0,
		@CurrentMinute INT = 0,
		@CurrentSecond INT = 0;

WHILE @CurrentHour < 24
	BEGIN
		WHILE @CurrentMinute < 60
			BEGIN
				WHILE @CurrentSecond < 60
					BEGIN
						INSERT INTO Time VALUES (@CurrentHour, @CurrentMinute, @CurrentSecond);

						SET @CurrentSecond = @CurrentSecond + 1;
					END

				SET @CurrentMinute = @CurrentMinute + 1;
				SET @CurrentSecond = 0;
			END

		SET @CurrentHour = @CurrentHour + 1;
		SET @CurrentMinute = 0;
		SET @CurrentSecond = 0;
	END

I moje pytanko to wymiataczy - czy jest jakieś lepszy, bardziej wydajny sposób aby to zrobić?

4

Tak, nie używać pętli:

with h as (
	select 
		number h 
	from 
		spt_values 
	where 
		type = 'p' 
		and number between 0 and 23),
m as (
	select 
		number m 
	from 
		spt_values 
	where 
		type = 'p' 
		and number between 0 and 59)

insert into Time(hour,    minute,  second)
select 
    h
    ,m.m
    ,s.m as s 
from 
    h
    cross join m
    cross join m s

1 użytkowników online, w tym zalogowanych: 0, gości: 1