2010-06-15 40 views
0

我們剛剛切換到鏈接服務器的同義詞,並注意到我們的FOR XML輸出不再正確。從視圖返回XML結果時,我們可以將視圖別名,並將其指定爲元素名稱。然而,對於同義詞,它似乎忽略了別名?我們仍然主要使用SQL 2005 - 這個錯誤似乎沒有發生在我們的2008實例上。這是一個已知的問題,以及解決方法的任何想法?對同義詞使用FOR XML AUTO

例如,這就是我們曾經是能夠做到:

select top 3 number from Numbers as elementname for xml auto 

<elementname number="0"/><elementname number="1"/><elementname number="2"/> 

這是用同義詞會發生什麼:

select top 3 number from Numbers_synonym as elementname for xml auto 

<dbo.Numbers number="0"/><dbo.Numbers number="1"/><dbo.Numbers number="2"/> 

正如你所看到的,SQL服務器似乎使用實際引用對象的名稱而不是別名。對於跨服務器查詢,這會變得更糟,因爲您得到的是四部分名稱而不是好別名。 (如:<rick_server.rick_database.dbo.Numbers number="0"/> ...)

回答

1

有時FOR XML AUTO做了「錯誤的東西」 - 如果你使用的分數更詳細的,你可以控制XML元素名稱:

SELECT TOP 3 number 
FROM Numbers_synonym 
FOR XML PATH('elementname'), TYPE 
+0

我不工作的那家公司不再(這個問題是7個月大),所以我不能直接檢查它。你將如何使用XML PATH()和多表選擇(例如:兩個內部加入的同義詞)?使用別名表時,別名將用作嵌套元素名稱。 XML PATH將如何解析應用於哪個同義詞的路徑? – Rick 2011-01-25 13:55:57

+1

@Rick取決於您的查詢 - 您可以使用具有「FOR XML PATH」子句的相關查詢,這將允許它。 – 2011-01-25 14:04:13