sql – 如何将N行默认值插入表中
发布时间:2020-05-24 09:55:53 所属栏目:MsSql 来源:互联网
导读:我有一个包含标识列的表以及表示创建日期的列: CREATE TABLE dbo.OrderStatus( OrderStatusId int IDENTITY(1, 1) NOT NULL, CreationDate datetime NOT NULL default GETDATE(), CONSTRAINT PK_OrderStatus PRIMARY KEY(Ord
|
我有一个包含标识列的表以及表示创建日期的列: 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中选择了一个数字列表,它们实际上也不会被插入桌子. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
