SQL Server附加查询

时间:2012-11-05 15:57:36

标签: sql-server tsql insert

我有以下(不工作)查询:

insert into [MyDB].[dbo].[Reports_StepsStat]  
    (ActivityID,TaskID,StepIndex,StepStatus,TimeSpanInSeconds,Score)
VALUES (
  SELECT
    tasks.ActivityID as ActivityID,
    tasks.ID as TaskID,
    [StepIndex]=item.value('(StepIndex)[1]', 'NVARCHAR(MAX)'),
    [StepStatus]=item.value('(Status)[1]', 'NVARCHAR(MAX)'),
    [TimeSpanInSeconds] = DATEDIFF(MINUTE, item.value('(StartedOn)[1]',    'datetime'),item.value('(FinishedOn)[1]', 'datetime')),
    tasks.Score as Score
  FROM 
    [MyDB].[dbo].[Tasks] as tasks 
  CROSS APPLY 
    [Progress].nodes ('//Progress/Steps/ProgressStep') Progress(item)
)  

内部选择查询(SELECT task.ActivityID..)完美运行并生成预期的表。

外部insert into部分应该使用Reports_StepsStat的名称将内部部分的结果附加到表中。这不起作用。

我已尝试并成功使用SELECT INTO,但显然SELECT INTO只能用于创建新表,而不是附加到现有表,这是我需要的。

我得到的错误是:

  

Msg 156,Level 15,State 1,Line 6
  关键字“SELECT”附近的语法不正确。
   Msg 102,Level 15,State 1,Line 14
  ')'附近的语法不正确。

2 个答案:

答案 0 :(得分:5)

我认为您的查询中不需要VALUES (

 insert into [MyDB].[dbo].[Reports_StepsStat]  
 (ActivityID,TaskID,StepIndex,StepStatus,TimeSpanInSeconds,Score)
 SELECT
  tasks.ActivityID as ActivityID,
  tasks.ID as TaskID,
  [StepIndex]=item.value('(StepIndex)[1]', 'NVARCHAR(MAX)'),
  [StepStatus]=item.value('(Status)[1]', 'NVARCHAR(MAX)'),
  [TimeSpanInSeconds]=DATEDIFF(MINUTE,item.value('(StartedOn)[1]', 'datetime'),
  item.value('(FinishedOn)[1]', 'datetime')),
  tasks.Score as Score
 FROM [MyDB].[dbo].[Tasks] as tasks 
     CROSS APPLY [Progress].nodes ('//Progress/Steps/ProgressStep') Progress(item)

答案 1 :(得分:3)

语法是

insert into a select * from b

所以只省略选择...周围的值(...)