2010-11-10 76 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格式。