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。这可以理解吗。。?