繁体   English   中英

如何基于多行子查询插入表中?

[英]How to insert into a table based on a multi-row subquery?

我有一个Dashboard_Diagram表:

CREATE TABLE Dashboard_Diagram
(
    diagram_id TINYINT,
    name VARCHAR(50)
)

INSERT INTO Dashboard_Diagram
    SELECT 1, 'Radar'
    UNION ALL
    SELECT 2, 'Bar'
    UNION ALL
    SELECT 3, 'Pie'

我有Dashboard_Configuration表:

CREATE TABLE SomeTable
(
    user_id UNIQUEIDENTIFIER,
    diagram_id TINYINT
)

@user_id

DECLARE @user_id UNIQUEIDENTIFIER = 'E4F77F2C-8AA1-493A-94A3-03EA212453D4'

我想根据Dashboard_Configuration的行动态地将行插入Dashboard_Diagram 所以静态地看起来像:

INSERT INTO Dashboard_Configuration
@userId, 1
. . . 

我努力了:

INSERT INTO Dashboard_Configuration
@user_id, (SELECT diagram_id FROM Dashboard_Diagram)

但是这会引发错误,因为子查询返回多个值:

Msg 512,Level 16,State 1,Line 7
子查询返回的值超过1。 当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做。

如何根据另一个表中的动态行数插入表中?

使用insert . . . select insert . . . select insert . . . select

INSERT INTO Dashboard_Configuration (User_id, name)
    SELECT @user_id, name
    FROM Dashboard_Diagram;

请注意,这也明确列出了列。 名称可能不正确(您不在问题中指定它们),但列出列是最佳做法。

编辑:

上面有类型冲突。 你真的打算这个吗?

INSERT INTO Dashboard_Configuration (User_id, diagram_id)
    SELECT @user_id, dd.diagram_id
    FROM Dashboard_Diagram dd;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM