当前位置: 首页 > 面试题库 >

如何在表中插入N行默认值

楚志强
2023-03-14
问题内容

我有一个包含标识列和代表创建日期的列的表:

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

由于标识列本身会生成一个值,而CreationDate始终将是当前日期(GETDATE()),因此我可以添加一行,这要归功于DEFAULTVALUES

INSERT INTO dbo.OrderStatus DEFAULT VALUES;

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

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

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

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

虽然,我更希望知道INSERT INTO .. DEFAULT VALUES多行的等效项,以防稍后添加另一列具有默认值的列。

有没有办法用DEFAULT VALUES或类似的方法将N行插入表中?


问题答案:

例如,您可以使用原始定义,而仅使用while循环

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

使用递归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,您必须指定OPTION(MAXRECURSION ...)它是否大于100。还要注意,即使您从CTE中选择了一个数字列表,它们实际上也不会插入表中。



 类似资料:
  • 问:有没有一种方法可以在PostgreSQL表中使用所有列的默认值插入行,而不指定任何列名? 背景:如果我有一个表,其中有两列都有默认值(或者简单地接受NULL),如果我希望行的值是默认值,我可以在插入行时省略列名。例如: 有办法做到这一点还是明令禁止?我找不到这种案子的任何文件。谢了!

  • 本文向大家介绍在MySQL中仅使用默认值插入行,包括了在MySQL中仅使用默认值插入行的使用技巧和注意事项,需要的朋友参考一下 在创建表时使用DEFAULT关键字,只要您不为该列提供值,它将插入默认值。 让我们首先创建一个表。在这里,对于ClientAge,我们设置了默认值24:首先让我们创建一个表。在这里,对于ClientAge,我们设置了默认值24- 使用insert命令在表中插入一些记录。对

  • 本文向大家介绍如何在MySQL ENUM数据类型中插入默认值?,包括了如何在MySQL ENUM数据类型中插入默认值?的使用技巧和注意事项,需要的朋友参考一下 我们可以借助ENUM数据类型的DEFAULT属性来实现。如果未指定值,则DEFAULT属性会使ENUM数据类型具有默认值。换句话说,我们可以说INSERT语句不必为此字段包含值,因为如果不包含该值,那么将插入DEFAULT之后的值。DEFA

  • 问题内容: 在MySQL中,我会使用 但这会导致SQLite错误。SQLite的正确语法是什么? 问题答案: 在此之前,已经回答了这一问题:是否可以一次在SQLite数据库中插入多行? 要回答您对OMG Ponies的评论,请回答: 从3.7.11版本开始,SQLite确实支持多行插入。理查德·希普(Richard Hipp)评论:

  • 列插入和更新默认值是指创建 默认值 对于一行中的特定列,INSERT或UPDATE语句正在对该行执行,如果 没有为该列的INSERT或UPDATE语句提供值 . 也就是说,如果一个表有一个名为“timestamp”的列,并且INSERT语句继续执行,但不包括该列的值,则INSERT default将创建一个新值,例如current time,用作要插入“timestamp”列中的值。如果声明 do

  • 我试图在表中插入值,它说的是错误,请告诉我哪里错了,这是我的代码,它说的是请重试 你能指导我吗?我以为问题出在约会上