How to insert N rows of default values into a table

前端 未结 4 1101
闹比i
闹比i 2021-01-04 19:02

I have a table containing an identity column as well as a column representing the creation date:

CREATE TABLE dbo.OrderStatus
(
    OrderStatusId int IDENTIT         


        
4条回答
  •  南笙
    南笙 (楼主)
    2021-01-04 19:26

    You can use your original definition and just use a while loop, for example

    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
    

    Here's how to do it using a recursive CTE:

    ;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
    

    Just note that for the CTE you'd have to specify OPTION(MAXRECURSION ...) if it's greater than 100. Also note that even though you're selecting a list of numbers from the CTE, they don't actually get inserted into the table.

提交回复
热议问题