2016-05-25 4 views
0

ich einen Spaltenwert als ein XML-Knoten wie so zu bekommen versuche:SQL FOR XML FÜR PATH Spalte Wert

FOR XML PATH(V_CONSTAT_ACTUAL_DATES.JOB_NUMBER), Type 

aber ich bekomme diese Fehlermeldung:

Incorrect syntax near 'V_CONSTAT_ACTUAL_DATES'. Expecting STRING or TEXT_LEN

ist, was ich versuche nicht möglich zu erreichen? Hier

ist die vollständige SQL-Abfrage:

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') 

Ich versuche Spaltenwert von JOB_NUMBER als Knotennamen

Hier ist ein Beispiel meiner aktuellen XML zu erhalten:

<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> 

Was ich versuche zu tun, ist die V_CONSTAT_PROJ_DATES.JOB_NUMBER als Schlüsselwert (FA50104)

+0

Post gesamten Code – TheGameiswar

+0

FOR XML PATH ('V_CONSTAT_ACTUAL_DATES.JOB_NUMBER'), Typ –

+1

Der Wert innerhalb 'PATH()' hat ein ** Stringliteral ** sein - nicht verweisen eine Variable oder Spalte nach Name. Dieses Zeichenfolgenliteral definiert den ** Namen ** des äußersten XML-Knotens für jede Zeile in Ihrer XML-Ausgabe. –

Antwort

1

Sie müssen das äußere Element "von Hand" erstellen. Einfaches Beispiel:

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