2012-11-05 70 views
1

我有以下(不工作)查询:SQL Server的追加查询

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只能用于创建一个新的表,而不是附加到现有的表,这是我需要的。

我得到的错误是:

消息156,15级,状态1,第6行
关键字附近有语法错误 'SELECT'。
Msg 102,Level 15,State 1,Line 14
'''附近的语法不正确。

回答

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) 
+0

。非常感谢! –

3

语法是

insert into a select * from b 

所以只是省略surroundng选择的值(...)...