如何使用INSERT SELECT?

时间:2014-11-27 06:49:07

标签: sql-server

我有桌子的结构:

[Subjects]

  • id int Identity Specification yes
  • 已删除位

[Juridical]

  • id int
  • 名称varchar
  • typeid int

[Individual]

  • id int
  • 名称varchar

JuridicalIndividual它是Subjects课程的儿童课程。所以这意味着表IndividualSubjects中的相同行具有相同的id

现在我有一张桌子:

[MyTable]

  • typeid varchar
  • 名称varchar

我想从这个表中选择数据并将其插入到我的表结构中。但我不知道该怎么做。我尝试使用OUTPUT

INSERT INTO [Individual](Name)
OUTPUT false
INTO [Subjects].[Deleted]
SELECT [MyTable].[Name] as Name
  FROM [MyTable]
  WHERE [MyTable].[type] = 'Indv'

但语法不正确。

2 个答案:

答案 0 :(得分:2)

只需使用:

INSERT INTO Individual(Name)
SELECT [MyTable].[Name] as Name
  FROM [MyTable]
  WHERE [MyTable].[type] = 'Indv'

INSERT INTO Subjects(Deleted)
SELECT [MyTable].[Name] as Name
  FROM [MyTable]
  WHERE [MyTable].[type] = 'Indv'

您无法在两个表中的单个查询中插入,您需要两个单独的查询。因此,我将您的初始查询拆分为两个INSERT语句,以便将记录添加到IndividualSubjects表中。

正如@marc_s所说,您必须在SELECT语句中选择确切的列数,并在列表中插入要插入数据的列数。

除了这两个与语法相关的约束外,您完全可以在SELECT部分进行任何过滤,或者像在普通SELECT查询中那样进行任何复杂的逻辑

答案 1 :(得分:1)

您需要使用以下语法:

INSERT INTO [Individual] (Name)
   SELECT [MyTable].[Name]
   FROM [MyTable]
   WHERE [MyTable].[type] = 'Indv'

您应该在INSERT INTO行中定义要插入的列的列表,然后您必须有一个SELECT,可以根据需要返回那么多列(并且列类型需要匹配) ,也是)