3

次のようにxmlを返す必要があります

<row id="1">
<cell>1</cell>
<cell>setup/pagemst</cell>
<cell>Page Master</cell>
</row>
<row id="2">
<cell>2</cell>
<cell>setup/modules</cell>
<cell>Module Master</cell>
</row>

次のクエリを使用しましたが、機能しません

select 
pageid id,pgurl cell,pgname cell
from m_pages
for xml raw

すべての列に同じ列名を使用すると、Oracleでは正常に機能しますが、SQL Server 2005では機能しません。アイデアはありますか?

事前に感謝します

4

1 に答える 1

3

FOR XML PATHSQL Server 2005 以降で使用可能な構文を使用します。次のようなものを試してください。

DECLARE @table TABLE (PageID INT, PageUrl VARCHAR(50), PageName VARCHAR(50))

INSERT INTO @table VALUES(1, 'setup/pagemst', 'Page Master'),(2, 'setup/modules', 'Module Master')

select 
    PageID AS '@id',
    PageID AS 'cell',
    '',
    PageUrl AS 'cell',
    '',
    PageName AS 'cell'
from @table
FOR XML PATH('row')

最終的に出力が得られます:

<row id="1">
  <cell>1</cell>
  <cell>setup/pagemst</cell>
  <cell>Page Master</cell>
</row>
<row id="2">
  <cell>2</cell>
  <cell>setup/modules</cell>
  <cell>Module Master</cell>
</row>

このFOR XML PATH構文を使用すると、XML 属性 ( ... AS '@id') または XML 要素として返す値を定義できます。要素間に「空の」行を追加することで、出力が単一の<cell>....</cell>XML 要素にマージ/連結されるのを防ぎます。

于 2012-03-24T14:10:08.967 に答える