レガシーコードを処理し、設計が不十分なデータベースに必要なものを表示しようとして、テーブルで自己結合を行って、レコードの交差を特定の順序で表示しました-単純化した例
SET @setOfRecords = 1234
SET @subsetOfRecords = 4567
--Set A
SELECT *
FROM results
WHERE
resultSet = @setOfRecords AND
resultSubset = 4567
UNION
--Set B
SELECT *
FROM results
WHERE
resultSet = @setOfRecords AND
resultSubset <> 4567
正しく表示されます。
Set A
Set B
ただし、サブセットIDをパラメータ化すると、この順序が逆になります-たとえば
SET @setOfRecords = 1234
SET @subsetOfRecords = 4567
--Set A
SELECT *
FROM results
WHERE
resultSet = @setOfRecords AND
resultSubset = @subsetOfRecords
UNION
--Set B
SELECT *
FROM results
WHERE
resultSet = @setOfRecords AND
resultSubset <> @subsetOfRecords
正しく表示されない、つまり
Set B
Set A
これが理想的な方法ではないことは承知していますが、他の制約により、この実装が必要になっています。私の質問は、resultSubset ID のパラメーター化によって順序付けが影響を受ける理由についてのみです。
何か案は?SQL Server 2008 で実行されています。
ありがとう、ポール