Sql 使用select查询插入
我有三张表:主表、元素表、检查表Sql 使用select查询插入,sql,sql-server,Sql,Sql Server,我有三张表:主表、元素表、检查表 master_id, master_name, 掌握 master_id, master_name, 元素 master_id, master_name, element_id, element_name, 检查 master_id, mas
master_id,
master_name,
掌握
master_id,
master_name,
元素
master_id,
master_name,
element_id,
element_name,
检查
master_id,
master_name,
(master_id)
(element_id)
check_id
check_name
description
我想在check
表中插入值,例如check\u id,check\u name,description
和element
表中的master\u id
master_id,
master_name,
我尝试了以下查询
master_id,
master_name,
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',)
它向我抛出了以下错误
master_id,
master_name,
味精116,第16级,状态1,第1行当子查询未引入EXISTS时,只能在选择列表中指定一个表达式
master_id,
master_name,
Msg 213,16级,状态1,第1行提供的值的列名或数目与表定义不匹配
master_id,
master_name,
有人能给我一个想法吗?你可以或者吃类似的东西
master_id,
master_name,
INSERT INTO dbo.Yourtable(list of columns)
VALUES (list of scalar, atomic values)
但是,您需要提供原子的标量值——文字或变量
master_id,
master_name,
或使用此语法
master_id,
master_name,
INSERT INTO dbo.YourTable(list of columns)
SELECT (list of columns)
FROM dbo.YOurSourceTable ......
但是在本例中,您不指定值
关键字
master_id,
master_name,
因此,在您的情况下,请尝试:
master_id,
master_name,
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
另外:不要使用旧式的连接,只使用逗号将子句中的表列表与
子句分隔开-这在20多年前的SQL-92标准中就已经被弃用了!使用适当的ANSI连接与内部连接
或左侧外部连接
master_id,
master_name,
更新:好,因此您似乎要先在主表
中插入一些内容(您的问题不清楚),然后您希望在后续插入中使用该范围标识
-尝试以下操作:
master_id,
master_name,
INSERT INTO dbo.Master(list-of-columns) VALUES(.........)
DECLARE @MasterID INT
SELECT @MasterID = SCOPE_IDENTITY()
INSERT INTO dbo.CHECK(master_id, element_id, check_id, check_name, description)
SELECT
e.ELEMENT_ID, @MasterID, '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 = @MasterID
你可以或者吃类似的东西
master_id,
master_name,
INSERT INTO dbo.Yourtable(list of columns)
VALUES (list of scalar, atomic values)
但是,您需要提供原子的标量值——文字或变量
master_id,
master_name,
或使用此语法
master_id,
master_name,
INSERT INTO dbo.YourTable(list of columns)
SELECT (list of columns)
FROM dbo.YOurSourceTable ......
但是在本例中,您不指定值
关键字
master_id,
master_name,
因此,在您的情况下,请尝试:
master_id,
master_name,
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
另外:不要使用旧式的连接,只使用逗号将子句中的表列表与
子句分隔开-这在20多年前的SQL-92标准中就已经被弃用了!使用适当的ANSI连接与内部连接
或左侧外部连接
master_id,
master_name,
更新:好,因此您似乎要先在主表
中插入一些内容(您的问题不清楚),然后您希望在后续插入中使用该范围标识
-尝试以下操作:
master_id,
master_name,
INSERT INTO dbo.Master(list-of-columns) VALUES(.........)
DECLARE @MasterID INT
SELECT @MasterID = SCOPE_IDENTITY()
INSERT INTO dbo.CHECK(master_id, element_id, check_id, check_name, description)
SELECT
e.ELEMENT_ID, @MasterID, '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 = @MasterID
这很好。但是我想从“master”表中获取“master_id”作为scope_identity()值,并将其与“check”表列值一起插入…你能帮我吗?@RamPrakash:更新了我的ResponseEyes,正是我首先在主表中插入一些数据。2.使用Scope_identity()获取主\u id。3.使用检查表列插入该范围标识,例如(主标识、元素标识、检查标识、检查名称、说明)。“check”表的最终输出应该是Master_id(来自Master table)、element_id(来自element table)、check_id、check_name、description。这可以理解吗?这很好。但是我想从“master”表中获取“master_id”作为scope_identity()值,并将其与“check”表列值一起插入…你能帮我吗?@RamPrakash:更新了我的ResponseEyes,正是我首先将一些数据插入到master表中的。2.使用Scope_identity()获取主\u id。3.使用检查表列插入该范围标识,例如(主标识、元素标识、检查标识、检查名称、说明)。“check”表的最终输出应该是Master_id(来自Master table)、element_id(来自element table)、check_id、check_name、description。这可以理解吗。。?