我有3个表master,element,check。
掌握
master_id,
master_name,
元素
element_id,
element_name,
检查
(master_id)
(element_id)
check_id
check_name
description
我想在check
表格中插入值,例如check_id,check_name,description
,master_id
来自master
表,element_id
来自element
表。< / p>
我尝试了以下查询。
insert
into CHECK values((select e.ELEMENT_ID,m.MASTER_ID from MASTER as m,ELEMENT as e where m.MASTER_ID=3 and ELEMENT_ID=3),'M001','chkitem1','Check description',)
它引发了以下错误。
Msg 116,Level 16,State 1,Line 1
当未使用EXISTS引入子查询时,只能在选择列表中指定一个表达式。Msg 213,Level 16,State 1,Line 1
列名或提供的值数与表定义不匹配。
任何人都可以为此提出想法吗?
答案 0 :(得分:4)
您可以使用类似
INSERT INTO dbo.Yourtable(list of columns)
VALUES (list of scalar, atomic values)
但是你需要提供原子,标量值 - 文字或变量。
或您使用此语法
INSERT INTO dbo.YourTable(list of columns)
SELECT (list of columns)
FROM dbo.YOurSourceTable ......
但在这种情况下,您不指定VALUES
关键字。
所以在你的情况下,试试:
INSERT INTO dbo.CHECK(master_id, element_id, check_id, check_name, description)
SELECT
e.ELEMENT_ID, m.MASTER_ID, 'M001', 'chkitem1', 'Check description'
FROM
dbo.MASTER AS m
INNER JOIN
dbo.ELEMENT AS e ON m.MASTER_ID = e.ELEMENT_ID
WHERE
m.Master_ID = 3
另外:不要使用逗号分隔FROM
子句中的表列表的旧式JOIN - 已经不推荐使用 SQL-92 标准,更多比20年前!请使用适当的ANSI JOIN代替INNER JOIN
或LEFT OUTER JOIN
。
更新:确定,所以您似乎首先在Master
表中插入了一些内容(从您的问题中未明确)然后您想要使用{{1}在随后的插入中 - 试试这个:
SCOPE_IDENTITY