Aggiunta di testo per FOR XML SQL Select
-
26-09-2019 - |
Domanda
Ciao da un nO0b SQL,
Ho tre affermazioni Select
voglio unirmi:
Seleziona 2 è un FOR XML
Selezionare per cui voglio aggiungere sceglie 1 e 3 (che si limita a mostrare un po 'di testo) come una sorta di intestazione / piè di pagina.
Tutti e tre i Seleziona funzionare come previsto e formo tre parti di un .xml podcast di ben formata, ma ho bisogno di loro di finire in un risultato così posso finalmente salvarlo in un file .xml (che sarà il mio prossimo mal di testa , Credo).
Ho provato permutazioni di +
, UNION
e JOIN
che la mia mente inesperta può venire con, ma inutilmente.
Seleziona 1 # (semplicemente un testo)
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>© 2010</copyright>
<itunes:subtitle>Subtitle</itunes:subtitle>
<itunes:owner>
<itunes:name>Name</itunes:name>
<itunes:email>user@domain.com</itunes:email>
</itunes:owner>
<itunes:category text="Religion & Spirituality">
<itunes:category text="Christianity" />
</itunes:category>
<itunes:explicit>No</itunes:explicit>
<ttl> 120 </ttl>'
Seleziona 2 # (miei dati)
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
Seleziona # 3 (più testo)
Select '</channel>
</rss>'
(sto usando MS SQLSMS 2008.) (La natura complessa della seconda dichiarazione prescelta è dovuto al fatto che si sta recuperando dati da una DotNetNuke "User-Defined Table / Form & List", che deve prima essere "appiattita".)
Qualsiasi aiuto sarebbe apprezzato, grazie.
Soluzione
Declare @V1 VarChar(Max), @V2 VarChar(Max), @V3 VarChar(Max)
Select @V1 = ...
Set @V2 = (Select ...)
Select @V3 = ...
Select @V1+@V2+@V3
In alternativa, gettato # 1 e # 3 in XML.