我的任务是将一个古老的(2007 年)据称是 ASP.NET 站点从拥有它的人办公室的“私人”服务器迁移到我公司在机架空间上的托管帐户。在我们切换 DNS 之前,一切都很顺利。原来,最初的程序员已经硬编码了对文件的引用,特别是对生成和格式化导航菜单的文件。当我们替换硬编码的引用时,它的行为突然变得不像它应该的那样。我追踪了他用来为菜单生成 XML 表的查询。
SELECT
parent.id,
parent.title,
'/page.aspx?id=' + isnull(cast(parent.id as varchar),'') + '&name=' + parent.name url,
siteMapNode.id, siteMapNode.title,
'/page.aspx?id=' + isnull(cast(siteMapNode.id as varchar),'') + '&name=' + siteMapNode.name url,
siteMapSubNode.title,
'/page.aspx?id=' + isnull(cast(siteMapSubNode.id as varchar),'') + '&name=' + siteMapSubNode.name url
FROM page parent
right join page siteMapNode on siteMapNode.pageid=parent.id and siteMapNode.active=1 and siteMapNode.hidden=0
left join page siteMapSubNode on siteMapSubNode.pageid=siteMapNode.id and siteMapSubNode.active=1 and siteMapSubNode.hidden=0
where SiteMapNode.name <> 'home' and parent.menu = '1' and parent.active = 1 and parent.hidden <> 1
order by parent.orderby, siteMapNode.orderby
for xml auto
我已经备份了本地数据库,也在他们办公室的那个盒子上,“恢复”到我本地测试数据库上的备份,然后从我的测试数据库导入到 rackspace 的数据库。(所有这些中间人的东西都是为了绕过他们的防火墙。)因此,就所有意图和目的而言,所有 3 台服务器上使用的源代码、表和查询都是精确的副本。
当我在 MSSQL 中运行该查询时,以下是我得到的结果的简短摘录:
他们的服务器(现在版本未知,我必须通过 teamviewer 才能找到。)和我的服务器(MSSQL 2008 Server 10.0.2531 - 我想可能是 SP1)
Rackspace 的服务器(MSSQL 2008 服务器 10.0.4064 我想可能是 SP2)
非常感谢任何关于为什么机架空间行为如此奇怪的建议、提示和想法。似乎很明显这与服务器的差异有关,但我不知道是版本、SP、设置还是什么。如果有人见过类似的东西,我很想听听你从中学到了什么。我只是一个不起眼的程序员,绝对不是 SQL 专家。
编辑:这是表的架构,id 是主键,名称不佳的 pageid 实际上更像是 parent-page-id。
我试过用和不用 xml auto 来查看它。当我为 xml auto 起飞时,它以稍微不同的顺序返回相同的结果,但是当我将查询的第 4 行从 siteMapNode.id 更改为 parent.pageid 时,结果显示相同的顺序。添加 xml auto back in 显示与上图相同的结果。我会尝试使用 xml 路径,感谢您的建议!