1

次の(機能していない)クエリがあります:

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クエリ(SELECT task.ActivityID..)は完全に機能し、期待されるテーブルを生成します。

外側のinsert into部分は、内側の部分の結果を。という名前でテーブルに追加することになっていますReports_StepsStat。これは動作しません。

私はそれをで試みて成功しましたSELECT INTOが、どうやらSELECT INTO新しいテーブルを作成するためにのみ使用でき、既存のテーブルに追加することはできません。これは私が必要としていることです。

私が得るエラーは次のとおりです。

メッセージ156、レベル15、状態1、行6
キーワード「SELECT」の近くの構文が正しくありません。
メッセージ102、レベル15、状態1、行14
')'の近くの構文が正しくありません。

4

2 に答える 2

6

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)
于 2012-11-05T16:01:47.503 に答える
3

構文は

insert into a select * from b

したがって、select ...を囲む値(...)を省略してください。

于 2012-11-05T16:01:45.990 に答える