générer un nombre fixe de lignes dans une table

Pas capable de formuler la question correctement, donc je ne pouvais pas chercher ce que je veux. Tout ce dont j'ai besoin, c'est d'une table fictive avec une seule colonne de say guids, que je l'utilise à d'autres fins. Sans écrire réellement le même insert .. newID() n fois, se demandant s'il y a une solution élégante.

Une question similaire serait comment remplir une table vide avec une colonne int avec des nombres de 1-n.

 Row1: 1 Row2: 2 ....... Row100:100 

Cette méthode est incroyablement rapide. Si vous avez besoin de générer une table de nombres à partir de rien, c'est probablement le "meilleur" moyen disponible.

 WITH t0(i) AS (SELECT 0 UNION ALL SELECT 0), t1(i) AS (SELECT 0 FROM t0 a, t0 b), t2(i) AS (SELECT 0 FROM t1 a, t1 b), t3(i) AS (SELECT 0 FROM t2 a, t2 b), n(i) AS (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 0)) FROM t3) SELECT i FROM n WHERE i BETWEEN 1 AND 100 

Vous pouvez le faire de manière récursive.

Pour les numbers, par exemple:

 WITH r AS ( SELECT 1 AS n UNION ALL SELECT n+1 FROM r WHERE n+1<=100 ) SELECT * FROM r 

Au lieu d'un CTE récursif, je recommand une approche basée sur un set de n'importe quel object que vous connaissez a déjà plus de 100 lignes.

 --INSERT dbo.newtable(ID, GUID) SELECT TOP (100) ROW_NUMBER() OVER (ORDER BY [object_id]), NEWID() FROM sys.all_columns ORDER BY [object_id]; 

Pour beaucoup d'autres idées, voir cette série:

Une manière;

 ;with guids( i, guid ) as ( select 1 as i, newid() union all select i + 1, newid() from guids where i < 100 ) select guid from guids option (maxrecursion 100)