How to insert N rows of default values into a table

前端 未结 4 1064
闹比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:25

    The Tally Table method can insert large sets of multiple rows, providing the tally table is big enough. This Tally table will handle up to 1000 entries.

    WITH Tally (n) AS
    (
        -- 1000 rows
        SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
        FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) a(n)
        CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) b(n)
        CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) c(n)
    )
    --SELECT * FROM Tally;
    
    Create Table #temp (id int, d datetime, GUID uniqueidentifier, str1 nvarchar(1), number int)
    
    insert into #temp
    select n, getdate(), newid(), 'a', 101 from tally 
    where N<=100 -- THIS IS WHERE YOU INDICATE HOW MANY ROWS
    
    select * from #temp
    
    0 讨论(0)
  • 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.

    0 讨论(0)
  • 2021-01-04 19:27

    An easier way is:

    insert dbo.OrderStatus default values
    go 500
    

    this will insert 500 rows of default values.

    0 讨论(0)
  • 2021-01-04 19:41

    Set up a trigger when a new row is CREATEd:

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

    0 讨论(0)
提交回复
热议问题