0

私は古い (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

私はローカルデータベースをオフィスのそのボックスにもバックアップし、ローカルテストデータベースのバックアップに「復元」してから、テストデータベースからラックスペースのデータベースにインポートしました。(このすべての仲介者は、ファイアウォールを回避するためのものです。) したがって、すべての意図と目的に対して、3 つのサーバーすべてで使用されるソース コード、テーブル、およびクエリは正確なコピーです。

そのクエリを MSSQL で実行すると、得られる結果の短い抜粋を次に示します。

彼らのサーバー (現在のバージョンは不明です。調べるには teamviewer を使用する必要があります。) と私のサーバー (MSSQL 2008 Server 10.0.2531 - おそらく SP1 だと思います) 正しいフォーマット

Rackspace のサーバー (MSSQL 2008 サーバー 10.0.4064 おそらく SP2 だと思います) 不適切なフォーマット

ラックスペースが奇妙に振る舞う理由についてのアドバイス、ヒント、アイデアは大歓迎です。サーバーの違いが関係しているのは明らかなようですが、バージョンなのか、SPなのか、設定なのか、何なのかわかりません。誰かが似たようなものを見たことがあれば、そこから学んだことを聞きたいです. 私はただの謙虚なプログラマーであり、決して SQL の専門家ではありません。

編集: これがテーブルのスキーマです。id は主キーです。名前が不適切な pageid は、実際には親ページ ID に近いものです。 ここに画像の説明を入力

私はxml autoの有無にかかわらずそれを見てみました。xml auto を離陸すると、同じ結果がわずかに異なる順序で返されますが、クエリの 4 行目を siteMapNode.id から parent.pageid に変更すると、結果は同じ順序で表示されます。xml auto back を追加すると、上記の画像と同じ結果が表示されます。for xml パスを試してみます。提案をありがとう!

4

0 に答える 0