Две идентичные таблицы, два идентичных SQL-запроса, два совершенно разных результата - PullRequest
0 голосов
/ 10 февраля 2012

Мне было поручено перенести древний (2007 г.) предположительно сайт ASP.NET с «частного» сервера в офисе людей, владеющих им, на учетную запись хостинга моей компании в rackspace. Все прошло гладко, пока мы не переключили 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) correct formatting

Сервер Rackspace (MSSQL 2008 server 10.0.4064 Я думаю, может быть SP2) Incorrect formatting

Любые советы, подсказки, идеи о том, почему стойка так странно действует, очень ценится. Кажется очевидным, что это связано с разницей в серверах, но я не могу сказать, является ли это версией, SP, настройкой или чем-то. Если кто-нибудь когда-либо видел что-то подобное, я хотел бы услышать, что вы узнали из этого. Я просто скромный программист, определенно не эксперт по SQL.

РЕДАКТИРОВАТЬ: Вот схема таблицы, id является первичным ключом, под псевдонимом pageid на самом деле больше родительский идентификатор страницы. enter image description here

Я пытался смотреть на это с и без xml auto. Когда я снимаю для xml auto, он возвращает те же результаты в несколько ином порядке, но когда я меняю 4-ю строку запроса с siteMapNode.id на parent.pageid, тогда результаты показывают тот же порядок. Добавление xml auto обратно показывает те же результаты, что и на изображениях выше. Я попробую поэкспериментировать с путём xml, спасибо за предложение!

...