これは、問題を示すために実際のクエリを簡略化したものです。サンプルの Adventureworks データベースで実行できます。
SELECT Person.Address.*,
(SELECT TOP 1 [Name]
FROM Person.StateProvince
WHERE Person.StateProvince.StateProvinceId = Person.Address.StateProvinceId AND Person.StateProvince.TerritoryId IN (5, 6, 7)
ORDER BY Person.StateProvince.TerritoryId) AS [Name]
FROM Person.Address
ORDER BY [Name]
これはうまくいきますが、私の問題は、フィールドごとの順序に照合を追加すると、奇妙なエラー メッセージが表示されることです。
SELECT Person.Address.*,
(SELECT TOP 1 [Name]
FROM Person.StateProvince
WHERE Person.StateProvince.StateProvinceId = Person.Address.StateProvinceId AND Person.StateProvince.TerritoryId IN (5, 6, 7)
ORDER BY Person.StateProvince.TerritoryId) AS [Name]
FROM Person.Address
ORDER BY [Name] COLLATE Chinese_PRC_CI_AI
エラーは次のとおりです。
Msg 207, Level 16, State 1, Line 7
Invalid column name 'Name'.
サブクエリがない場合、collate 句を使用したクエリはうまく機能しますが、このようにする必要があります (複雑な理由で、信じてください :))。
このクエリが失敗する理由と、可能な回避策を知っている人はいますか? これはバグですか?
ありがとう!アダム