sql – 如何将N行默认值插入表中

前端之家收集整理的这篇文章主要介绍了sql – 如何将N行默认值插入表中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个包含标识列的表以及表示创建日期的列:
CREATE TABLE dbo.OrderStatus
(
    OrderStatusId int IDENTITY(1,1) NOT NULL,CreationDate datetime NOT NULL default GETDATE(),CONSTRAINT PK_OrderStatus PRIMARY KEY(OrderStatusId)
)

由于identity列本身生成一个值而CreationDate总是将成为当前日期(GETDATE()),因此我可以通过DEFAULT VALUES添加一行:

INSERT INTO dbo.OrderStatus DEFAULT VALUES;

但是,如果我想添加三个记录,我该怎么办?

当前解决方案(编辑了一些输入,因为它没有任何意义)

现在,为了做我想做的事,我用VALUES添加了几行:

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

虽然,我更愿意知道多行的INSERT INTO .. DEFAULT VALUES,如果我稍后再添加一个默认值的列.

有没有办法将N行插入到具有DEFAULT VALUES的表中或以类似的方式?

解决方法

例如,您可以使用原始定义并使用while循环
DECLARE  @OrderStatus TABLE
(
    OrderStatusId int IDENTITY(1,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

以下是使用递归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

请注意,对于CTE,如果它大于100,则必须指定OPTION(MAXRECURSION …).还要注意,即使您从CTE中选择了一个数字列表,它们实际上也不会被插入桌子.

原文链接:https://www.f2er.com/mssql/77390.html

猜你在找的MsSQL相关文章