Comment insert N lignes de valeurs par défaut dans une table

J'ai une table contenant une colonne d'identité ainsi qu'une colonne représentant la date de création:

CREATE TABLE dbo.OrderStatus ( OrderStatusId int IDENTITY(1, 1) NOT NULL, CreationDate datetime NOT NULL default GETDATE(), CONSTRAINT PK_OrderStatus PRIMARY KEY(OrderStatusId) ) 

Puisque la colonne d'identité génère une valeur par elle-même et que CreationDate est toujours la date courante ( GETDATE() ), je peux append une ligne grâce à DEFAULT VALUES :

 INSERT INTO dbo.OrderStatus DEFAULT VALUES; 

Mais que puis-je faire si je veux append, disons, trois disques?

Solution actuelle (modification de certaines inputs car cela n'a aucun sens)

Pour l'instant, afin de faire ce que je veux, j'ajoute plusieurs lignes avec des VALUES :

 INSERT INTO dbo.OrderStatus (CreationDate) VALUES (GETDATE()), (GETDATE()), (GETDATE()) 

Bien que, je préférerais connaître l'équivalent de INSERT INTO .. DEFAULT VALUES pour plusieurs rangées, au cas où j'appendais une autre colonne avec une valeur par défaut plus tard.

Est-il possible d'insert N lignes dans une table avec des DEFAULT VALUES par DEFAULT VALUES ou d'une manière similaire?

Vous pouvez utiliser votre définition d'origine et utiliser simplement une boucle while, par exemple

 DECLARE @OrderStatus TABLE ( OrderStatusId int IDENTITY(1, 1) NOT NULL, CreationDate datetime NOT NULL DEFAULT GETDATE() --CONSTRAINT PK_OrderStatus PRIMARY KEY(OrderStatusId) -- this can be uncommented if creating a real table. ) DECLARE @i int = 0; WHILE @i < 100 -- insert 100 rows. change this value to whatever you want. BEGIN INSERT @OrderStatus DEFAULT VALUES SET @i = @i + 1; END SELECT * FROM @OrderStatus 

Voici comment le faire en utilisant un CTE récursif:

 ;with cteNums(n) AS ( SELECT 1 UNION ALL SELECT n + 1 FROM cteNums WHERE n < 100 -- how many times to iterate ) INSERT @OrderStatus SELECT * FROM cteNums 

Notez simplement que pour le CTE, vous devez spécifier OPTION(MAXRECURSION ...) s'il est supérieur à 100. Notez également que même si vous select une list de nombres du CTE, ils ne sont pas réellement insérés dans la table.

Un moyen plus simple est:

 insert dbo.OrderStatus default values go 500 

Cela inserta 500 lignes de valeurs par défaut.

Configurer un triggersur lorsqu'une nouvelle ligne est CREATEd:

https://msdn.microsoft.com/en-us/library/ms189799.aspx