2011-06-15 50 views
1

我有一個相當大的SELECT ... FOR XML PATH。如您所知,默認情況下,xml元素對應於具有null值的字段不會出現在結果xml樹中。這對我來說似乎是一個真正的問題,並且我希望始終顯示所有元素,無論值是否爲空。Xml元素儘管空值存在

是否有辦法(在我的選擇多於50場!)來實現的,如果沒有每場周邊的ISNULL(...,'')逐一在不改變FOR XML PATHFOR XML ELEMENTS使用XSINIL開關(這是不幸的是僅適用於ELEMENTS )?

我懷疑這2個不完全統計解決方案會導致不同的輸出,分別爲:<fieldname></fieldname><fieldname/>。如果可能的話,我更喜歡第一個,但我總是渴望閱讀你的寶貴建議。

在此先感謝! :-)

回答

0

不改變FOR XML PATH到 XML元素使用XSINIL 開關

您可以使用elements xsinilfor xml path

declare @T table (ID int identity, Name varchar(50)) 

insert into @T values ('Name1') 
insert into @T values (null) 
insert into @T values ('Name2') 

select 
    ID, 
    Name 
from @T 
for xml path('item'), root('root'), elements xsinil 

結果:

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <item> 
    <ID>1</ID> 
    <Name>Name1</Name> 
    </item> 
    <item> 
    <ID>2</ID> 
    <Name xsi:nil="true" /> 
    </item> 
    <item> 
    <ID>3</ID> 
    <Name>Name2</Name> 
    </item> 
</root> 
+0

才發現,原來我自己和它完美地解決了我的問題!我甚至可以在我的'SELECT'中保留屬性映射字段(但在這種情況下,如果它們爲null,我必須顯式使用'ISNULL'使它們出現)。我的問題明確表達了事物之間的錯誤認識和困惑。非常感謝Mikael。這是你第二次衝上sql問題的援助,我深深地意識到你(並且即將升起你的雕像作爲我的SQL大師!-)) – Ssithra 2011-06-15 09:59:18

+1

@Sithithra雕像將不勝感激:) 。我很高興能夠提供幫助。 – 2011-06-15 10:04:35