Добавление текста в оператор FOR XML SQL Select - PullRequest
0 голосов
/ 18 ноября 2010

Привет из SQL nO0b,
У меня есть три Select заявления, к которым я хочу присоединиться:

Выбор 2 - это FOR XML Выбор, к которому я хочу добавить Выбор 1 и 3 (которые просто отображают некоторый текст) в качестве своего рода верхнего / нижнего колонтитула.

Все три варианта выбора работают по назначению и образуют три части красиво сформированного подкаста .xml, но мне нужно, чтобы они заканчивались одним результатом, чтобы я мог в конечном итоге сохранить его в файл .xml (который будет моей следующей головной болью , Я полагаю).

Я пробовал перестановки +, UNION и JOIN, которые может придумать мой неопытный ум, но безрезультатно.

Выберите # 1 (просто текст)

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>user@domain.com</itunes:email>
      </itunes:owner>
      <itunes:category text="Religion &amp; Spirituality">
        <itunes:category text="Christianity" />
      </itunes:category>
      <itunes:explicit>No</itunes:explicit>
      <ttl> 120 </ttl>'   

Выберите # 2 (мои данные)

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

Выберите # 3 (больше текста)

Select '</channel>
</rss>'

(я использую MS SQLSMS 2008.) (Сложный характер второго оператора выбора связан с тем, что он извлекает данные из «Пользовательской таблицы / формы и списка» DotNetNuke, которая сначала должна быть «сведена».)

Любая помощь будет оценена, спасибо.

1 Ответ

1 голос
/ 18 ноября 2010
Declare @V1 VarChar(Max), @V2 VarChar(Max), @V3 VarChar(Max)

Select @V1 = ...

Set @V2 = (Select ...)

Select @V3 = ...

Select @V1+@V2+@V3

В качестве альтернативы приведите # 1 и # 3 к XML.

...