我有以下(不工作)查询:
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
')'附近的语法不正确。
答案 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
所以只省略选择...周围的值(...)