1

2005 および 2008R2 SQL Server から XML 形式で返されたデータを取得しようとしています。マスターとディテールの 2 つのテーブルがあります。XML でマスター情報を提供し、その中にクエリ対象の各マスター レコードの詳細情報 (存在する場合) を提供したいと考えています。詳細情報が存在しない場合は、何も返さずに空のノードを返す必要があります。たとえば、詳細レコードが存在する場合、次のようにします。

<masters>
  <master>
    <flda>value</flda>
    <fldb>value</fldb>
    <details>
      <detail>
        <dtla>value</dtla>
      </detail>
    </details>
  </master>
</masters>

詳細レコードが存在しない場合、これが必要です:

<masters>
  <master>
    <flda>value</flda>
    <fldb>value</fldb>
    <details />
  </master>
</masters>

詳細レコードがある場合にデータを正しく取得する次のクエリがありますが、詳細がない場合に空のノードを強制する方法がわかりません:

select m.flda, m.fldb,
       (select d.dtla
        from detail d
        where (d.mastid = m.id)
        for xml path('detail'), type) as 'details'
from master m
where (m.id = @id)
for xml path('master'), root('masters');
4

1 に答える 1

3

私は別のサイトで同じ質問をし、そこで「PortletPaul」から回答を得ました ( http://www.experts-exchange.com/Microsoft/Development/MS-SQL-Server/Q_28071909.html )。そこにアカウントがない場合、解決策は次のように ISNULL ディレクティブを使用することです。

select m.flda, m.fldb,
   isnull((select *
           from detail d
           where (d.mastid = m.id)
           for xml path('detail'), type),'') as 'details'
from master m
where (m.id = @id)
for xml path('master'), root('masters');

これにより、次のようなものが得られます。

<masters>
  <master>
    <flda>value</flda>
    <fldb>value</fldb>
    <details></details>
  </master>
</masters>

それは<details />私が欲しかったものではありませんが、十分に近いものです。

于 2013-03-21T16:41:29.600 に答える