2010-11-18 99 views
0

Hallo aus einer SQL-No0b,
Ich habe drei Select Aussagen möchte ich anschließen:Anfügen von Text zu FOR XML SQL-Select-Statement

Select 2 ist ein FOR XML Select, dem möchte ich Selects anhängen 1 & 3 (die einfach einen Text anzeigen) als eine Art Kopf-/Fußzeile.

Alle drei Selects funktionieren wie vorgesehen und bilden drei Teile eines schön geformten Podcasts .xml, aber ich brauche sie in einem Ergebnis, damit ich sie eventuell in einer .xml-Datei speichern kann (was mein nächster sein wird) Kopfschmerzen, nehme ich an).

Ich habe Permutationen von +, UNION und JOIN versucht, dass mein unerfahrener Geist kommen kann, aber ohne Erfolg.

Select # 1 (einfach etwas Text)

Select '<?xml version=''1.0''?> 
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"> 
    <channel> 
     <atom:link href="http://www.mysite.com/podcast/podcast.xml" rel="self" type="application/rss+xml" /> 
    <itunes:image href="http://www.mysite.com/Portals/0/Images/Audio/podcast_logo.jpg"/> 
    <link>http://www.mysite.com/Audio.aspx</link> 
<title>My Podcast</title> 
<description>My Podcast's Description</description> 
<language>en-us</language> 
<copyright>&#xA9; 2010</copyright> 
     <itunes:subtitle>Subtitle</itunes:subtitle> 
     <itunes:owner> 
     <itunes:name>Name</itunes:name> 
     <itunes:email>[email protected]</itunes:email> 
     </itunes:owner> 
     <itunes:category text="Religion &amp; Spirituality"> 
     <itunes:category text="Christianity" /> 
     </itunes:category> 
     <itunes:explicit>No</itunes:explicit> 
     <ttl> 120 </ttl>' 

Select # 2 (meine Daten)

Select 
(Select Cast(FieldValue as nvarchar(max)) from dbo.UserDefinedData where UserDefinedFieldId = 305 and UserDefinedRowId = item.UserDefinedRowId) as [title] 
,(Select 'Today''s Program is ' + Cast(FieldValue as nvarchar(max)) from dbo.UserDefinedData where UserDefinedFieldId = 305 and UserDefinedRowId = item.UserDefinedRowId) as [description] 
,(Select Cast(Cast(FieldValue as nvarchar(max)) as DateTime) from dbo.UserDefinedData where UserDefinedFieldId = 306 and UserDefinedRowId = item.UserDefinedRowId) as [pubdate] 
,(Select 'http://www.mysite.com/Portals/0/AudioFiles/RadioArchives/' + Cast(FieldValue as nvarchar(max)) from dbo.UserDefinedData where UserDefinedFieldId = 308 and UserDefinedRowId = item.UserDefinedRowId) as [guid] 
From 
dbo.UserDefinedRows item 
Where 
ModuleId = 820 
and UserDefinedRowID in (select UserDefinedRowID from UserDefinedData where UserDefinedFieldID = 306 and Cast(Cast(FieldValue as nvarchar(max)) as DateTime) between '2010-Nov-11' and '2010-Nov-18') 
Order By 
[pubdate] DESC 
for XML AUTO,ELEMENTS 

Select # 3 (mehr Text)

Select '</channel> 
</rss>' 

(Ich benutze MS SQLSMS 2008.) (Die komplexe Natur der zweiten Select-Anweisung ist aufgrund der Tatsache, dass es Daten aus einem DotNetNuke "Benutzerdefinierte Tabelle/Formular & Liste" abruft, die zuerst "abgeflacht" werden muss .)

Jede Hilfe wäre willkommen, Danke.

Antwort

1
Declare @V1 VarChar(Max), @V2 VarChar(Max), @V3 VarChar(Max) 

Select @V1 = ... 

Set @V2 = (Select ...) 

Select @V3 = ... 

Select @[email protected][email protected] 

Alternativ können Sie # 1 und # 3 in XML umwandeln.

+0

Das hat es getan. Du hast mich vor vielen Stunden der Frustration gerettet. Vielen Dank! Ich habe eine weitere Frage zu meinem letzten Problem mit diesem Projekt (in Bezug auf DATETIME) hier gepostet: http://StackOverflow.com/questions/4228335/displaying-a-cast-datetime-in-rfc822-format (Auch , aus Neugier, warum hat @ V2 "Set" statt "Select" verwendet?) – JDV

+0

Denn wenn ich mich richtig erinnere, Select @ V2 = ... Für Xml Auto funktioniert nicht. – Stu