You should avoid loops, etc. and try to approach this set. (google for "RBAR SQL")
Anyway, this works after 1 second on my laptop:
DROP TABLE dbo.calendario
GO
CREATE TABLE dbo.calendario (
datacal DATETIME NOT NULL PRIMARY KEY,
horautil BIT NOT NULL DEFAULT 1
);
DECLARE @dtmin DATETIME, @dtmax DATETIME, @intervals int
SELECT @dtmin = '2014-03-11 00:00:00'
, @dtmax = '2030-12-31 23:50:00'
SELECT @intervals = DateDiff(minute, @dtmin, @dtmax) / 10
;WITH
L0 AS(SELECT 1 AS c UNION ALL SELECT 1),
L1 AS(SELECT 1 AS c FROM L0 AS A, L0 AS B),
L2 AS(SELECT 1 AS c FROM L1 AS A, L1 AS B),
L3 AS(SELECT 1 AS c FROM L2 AS A, L2 AS B),
L4 AS(SELECT 1 AS c FROM L3 AS A, L3 AS B),
L5 AS(SELECT 1 AS c FROM L4 AS A, L4 AS B),
L6 AS(SELECT 1 AS c FROM L5 AS A, L5 AS B),
Nums AS(SELECT ROW_NUMBER() OVER(ORDER BY c) AS n FROM L6)
INSERT INTO dbo.calendario(datacal)
SELECT DateAdd(minute, 10 * (n - 1), @dtmin)
FROM Nums
WHERE n BETWEEN 1 AND @intervals + 1
source
share