2016-05-25 4 views
0

私はそうのようなXMLノードとして列の値を取得しようとしています:SQLバリュー

FOR XML PATH(V_CONSTAT_ACTUAL_DATES.JOB_NUMBER), Type 

が、私はこのエラーを取得:

Incorrect syntax near 'V_CONSTAT_ACTUAL_DATES'. Expecting STRING or TEXT_LEN

は、私がしようとしていますものです不可能なことを達成するために?ここで

は、完全なSQLクエリです:

SELECT 
(
SELECT V_CONSTAT_ACTUAL_DATES.JOB_NUMBER AS 'Key', 
(
    SELECT 
     (


     SELECT 
     (

     SELECT 
     (

     SELECT 
     CONVERT(date, V_CONSTAT_ACTUAL_DATES.ID120) AS 'actualFinish', 
     CONVERT(date, V_CONSTAT_BASE_DATES.ID120) AS 'baseLineStart' 
     FOR XML PATH(''), Type 
     ) 
     FOR XML PATH('baseStartFinishList'), Type 
     ) 
     FOR XML PATH(''), Type 




), 

     (
     SELECT CONVERT(date, V_CONSTAT_ACTUAL_DATES.DATE_TO_END) AS 'closingDate' 
     FOR XML PATH(''), Type 
     ), 
     (
     SELECT DATEDIFF(dd,V_CONSTAT_BASE_DATES.ID67,V_CONSTAT_ACTUAL_DATES.DATE_TO_END)-1 AS 'DaysOfConstruction' 
     FOR XML PATH(''), Type 
     ), 
     (
     SELECT DATEDIFF(dd,GETDATE(),V_CONSTAT_ACTUAL_DATES.DATE_TO_END) AS 'DaysToClosing' 
     FOR XML PATH(''), Type 
     ), 
     (
      SELECT 
      IsNull(V_CONSTAT_ACTUAL_DATES.IDNOTES2, ' ') AS 'notes' 
      FOR XML PATH(''), Type 
     ), 
     (
     SELECT DATEDIFF(dd,V_CONSTAT_BASE_DATES.ID187,V_CONSTAT_PROJ_DATES.ID187) AS 'ScheduleVariance' 
     FOR XML PATH(''), Type 
     ) 
FOR XML PATH('V_CONSTAT_PROJ_DATES.JOB_NUMBER'), Type 
) 
FOR XML PATH('KeyValue'), Type 
) 
FROM 
      ((V_CONSTAT_PROJ_DATES V_CONSTAT_PROJ_DATES INNER JOIN V_CONSTAT_ACTUAL_DATES V_CONSTAT_ACTUAL_DATES 
     ON 
      V_CONSTAT_PROJ_DATES.JOB_NUMBER=V_CONSTAT_ACTUAL_DATES.JOB_NUMBER) 
     INNER JOIN 
      V_CONSTAT_BASE_DATES V_CONSTAT_BASE_DATES 
     ON 
      (V_CONSTAT_ACTUAL_DATES.JOB_NUMBER=V_CONSTAT_BASE_DATES.JOB_NUMBER) AND (V_CONSTAT_PROJ_DATES.JOB_NUMBER=V_CONSTAT_BASE_DATES.JOB_NUMBER)) 
     INNER JOIN 
      V_CONSTAT_SCH_DATES V_CONSTAT_SCH_DATES 
     ON 
      ((V_CONSTAT_BASE_DATES.JOB_NUMBER=V_CONSTAT_SCH_DATES.JOB_NUMBER) AND (V_CONSTAT_PROJ_DATES.JOB_NUMBER=V_CONSTAT_SCH_DATES.JOB_NUMBER)) 
      AND (V_CONSTAT_ACTUAL_DATES.JOB_NUMBER=V_CONSTAT_SCH_DATES.JOB_NUMBER) 



WHERE V_CONSTAT_ACTUAL_DATES.AREA_DESC = 'Fairgrounds Phase 5' AND V_CONSTAT_ACTUAL_DATES.DATE_TO_END>=GETDATE() 

ORDER BY V_CONSTAT_ACTUAL_DATES.DATE_TO_END 
FOR XML PATH(''), ROOT('Root') 

私はここで、ノード名として

をJOB_NUMBERの列の値を取得しようとしています私の現在のXMLの例です:

<KeyValue> 
    <Key>FA50104</Key> 
    <V_CONSTAT_PROJ_DATES.JOB_NUMBER> 
     <baseStartFinishList> 
     <baseLineStart>2016-06-06</baseLineStart> 
     </baseStartFinishList> 
     <closingDate>2016-05-26</closingDate> 
     <DaysOfConstruction>237</DaysOfConstruction> 
     <DaysToClosing>1</DaysToClosing> 
     <notes> </notes> 
     <ScheduleVariance>0</ScheduleVariance> 
    </V_CONSTAT_PROJ_DATES.JOB_NUMBER> 
    </KeyValue> 

私がしようとしているのは、V_CONSTAT_PROJ_DATES.JOB_NUMBERをキー値(FA50104)とします。

+0

ポスト全体のXMLパスのコード – TheGameiswar

+0

( 'V_CONSTAT_ACTUAL_DATES.JOB_NUMBER')、タイプ –

+1

(PATH '内部値)'リテラル**文字列である必要があります** - あなたはを参照することはできません名前で変数または列。その文字列リテラルは、XML出力の各行の最も外側のXMLノードの** name **を定義します。 –

答えて

1

「手で」外側の要素を作成する必要があります。 簡単な例:

with t as (
select 
     1 as a, 2 as b, 3 as c, 4 as d, 'k100' as [key] 
) 
select [key], 
cast ('<'+ [key] + '>' + 
    cast(
    (select 
     (select a as g1, b as g2 for xml path ('grp'), type) 
     , (select c as g1, d as g2 for xml path ('grp'), type) 
    for xml path ('')) 
    as varchar(max)) 
    + '</'+ [key] + '>' 
as xml) xmlcol 
from t 
関連する問題