我有一个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,第16级,状态1,第7行
子查询返回的值超过1。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。
如何根据来自另一个表的动态行数将其插入到表中?
答案 0 :(得分:3)
使用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;