Fill a table with million row FAST
Last updated:
Warning: Review and test in a non-production environment before running.
IF OBJECT_ID('dbo.GetNums') IS NOT NULL DROP FUNCTION dbo.GetNums;
GO
CREATE FUNCTION dbo.GetNums(@n AS BIGINT) RETURNS TABLE
AS
RETURN
WITH
L0 AS(SELECT 1 AS c UNION ALL SELECT 1),
L1 AS(SELECT 1 AS c FROM L0 AS A CROSS JOIN L0 AS B),
L2 AS(SELECT 1 AS c FROM L1 AS A CROSS JOIN L1 AS B),
L3 AS(SELECT 1 AS c FROM L2 AS A CROSS JOIN L2 AS B),
L4 AS(SELECT 1 AS c FROM L3 AS A CROSS JOIN L3 AS B),
L5 AS(SELECT 1 AS c FROM L4 AS A CROSS JOIN L4 AS B),
Nums AS(SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS n FROM L5)
SELECT n FROM Nums WHERE n <= @n;
GO
-- To return 10 numbers you would simply pass the value 10 as input:
SELECT n FROM dbo.GetNums(10) AS Nums;
-----------------------------------------------------------------------------------------
IF OBJECT_ID('dbo.t1') IS NOT NULL DROP TABLE dbo.t1 ;
CREATE TABLE dbo.t1 ( i INT ,
t TEXT ,
c1 INT DEFAULT CHECKSUM(NEWID()) ,
c2 INT DEFAULT CHECKSUM(NEWID())
) ;
INSERT INTO dbo.t1 ( i , t )
SELECT n ,
REPLICATE('X', 200 + ( CHECKSUM(NEWID()) % 10 ))
FROM dbo.GetNums(1000000) ;
select * from dbo.t1