2010-11-10 73 views
0

我們遇到了一個問題,我們在兩臺不同的服務器上運行完全相同的查詢,運行完全相同的Service Pack並更新 - 9.0.4211 - 但接收兩個不同格式的XML結果集。有沒有人知道爲什麼/如何發生這種情況? SQL Server生成XML格式的方式是否存在某種設置/架構?我知道我們可以使用PATH選項來轉換xml,但此時所有的客戶端代碼都被寫入使用其中一個結果集的格式,並且使用路徑選項仍然無法讓我們知道AUTO選項對於正確的格式。SQL Server 2005 FOR XML子句

查詢 - 如果需要的話,可以提供

SELECT distinct 

operation.operationid, 
@zoneId as ZoneID, 
member.name, IsNull(member.firstname, '') as firstname, IsNull(member.lastname, '') as lastname, IsNull(member.email, '') as email, IsNull(member.memberid, '') as memberid, IsNull(member.type, '') as type, IsNull(member.AppMemberID, '') as AppMemberID 
FROM IQSECURE_TaskOperations operation 
join IQSECURE_RoleTasks r on operation.taskid = r.taskid 
join IQOBASE_Rosters roster on r.roleid = roster.roleid 
left outer join IQObase_Members member on roster.rosterid = member.Rosterid 
WHERE operation.operationid = @operationid AND roster.zoneid = @zoneId and member.memberid is not null 


union 

SELECT distinct 
operation.operationid, 
@zoneID as ZoneID, 
member.name, IsNull(member.firstname, '') as firstname, IsNull(member.lastname, '') as lastname, IsNull(member.email, '') as email, IsNull(member.memberid, '') as memberid, IsNull(member.type, '') as type, IsNull(member.AppMemberID, '') as AppMemberID 
FROM IQSECURE_TaskOperations operation 
join IQSECURE_RoleTasks r on operation.taskid = r.taskid 
join IQOBASE_Rosters roster on r.roleid = roster.roleid 
left outer join IQOBASE_Members_Exploded member on roster.rosterid = member.Rosterid 
WHERE operation.operationid = @operationid AND roster.zoneid = @zoneid and member.memberid is not null 

ORDER BY IsNull(member.type, ''), IsNull(member.lastname, ''), IsNull(member.firstname, ''), member.name 

FOR XML AUTO, XMLDATA 

返回的XML。

在此先感謝您提供的任何幫助。

喬恩

+1

那麼,無論是提供XML或解釋差異:) – Andomar 2010-11-10 16:17:41

回答

1

您可以檢查是否有對數據庫的任何差異:

SELECT * 
FROM sys.configurations 
ORDER BY name ; 

而且我還要檢查正在使用的客戶端。如果您使用的是SQL Management Studio,則有一個菜單選項Tools/Options。這有可能會影響你所看到的設置。

+0

謝謝,但我使用相同的客戶端擊中兩臺服務器。 – user503437 2010-11-10 17:06:40

1

這個問題是一個兩部分問題。兩個數據庫不完全相同,一個SQL 2000兼容模式與另一個SQL 2005相同。使用SQL 2000的那個數據庫生成正確的XML格式。所以,一個解決方法是使其他SQL 2000兼容。另一種解決方案是重寫沒有UNION的選擇。出於某種原因,UNION導致了不正確的XML格式。