处理一些遗留代码并试图让一个设计不佳的数据库显示我们想要的我在表格上做了一个自联合以按特定顺序显示记录的交集 - 简化例如
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 上运行。
谢谢,保罗