相关疑难解决方法(0)

有没有办法将多行插入到表中,所有列都有默认值?

我可以通过RBAR方式将多行插入到一个表中,所有列的默认值:

create table course(course_id serial primary key);

do $$
begin
  for i in 1..100000 loop
    insert into course default values;
  end loop;
end;$$;
Run Code Online (Sandbox Code Playgroud)

有没有办法用单个 SQL 语句做同样的事情?

postgresql default-value postgresql-9.4

16
推荐指数
2
解决办法
2万
查看次数

如何插入默认行?

如果我创建一个以标识列作为主键的表,并且所有其他列都有默认值,例如

create table rr (id int identity(1,1) primary key, dt datetime default getdate())
Run Code Online (Sandbox Code Playgroud)

sql-server

11
推荐指数
1
解决办法
2157
查看次数

将多行插入到只有 IDENTITY 列的表中

我有一个dbo.Groups定义如下的表:

CREATE TABLE dbo.Groups
(
  GroupID int NOT NULL IDENTITY (1,1) PRIMARY KEY
);
Run Code Online (Sandbox Code Playgroud)

该表实际上只包含一IDENTITY列。

有时我想一次插入多行并获取生成的 ID。(我已经有一个预定义的表变量,@output其中包含ID要在OUTPUT子句中使用的单个列。)

现在我知道如果它是单行我将如何进行:

INSERT INTO
  dbo.GroupID
OUTPUT
  inserted.GroupID INTO @output (ID)
DEFAULT VALUES
;
Run Code Online (Sandbox Code Playgroud)

但我希望能够一次性插入两个或更多。实际数量由此查询返回的行数决定:

SELECT
  *
FROM
  dbo.MySource
;
Run Code Online (Sandbox Code Playgroud)

因此,如果查询返回一行,我想插入一行dbo.Groups并返回生成的GroupID. 如果它是一百行,那么我希望插入一百行并同时生成和返回一百个 ID。

一种明显的方法是在循环中一次插入一行。我想避免这种情况,而是使用基于集合的方法,类似于

INSERT INTO
  dbo.GroupID
OUTPUT
  inserted.GroupID INTO @output (ID)
SELECT
  ...  -- what?
FROM
  dbo.MySource
;
Run Code Online (Sandbox Code Playgroud)

有没有办法IDENTITY在(最好)单个语句中只用一列将多行插入到表中?

sql-server-2008 sql-server insert identity

5
推荐指数
1
解决办法
1517
查看次数