大师。
我坚持我的问题,并将感谢任何帮助或建议。请检查this pic。
我不明白为什么我在底层查询中得到错误的结果。正如您所看到的,与previuos查询的区别仅在于" WHERE"条款,但这种差异必须导致相同的结果,因为它是一对一的连接。
重要的是,v_last_part_info
是一个视图,我最近更改了它。我认为这是由于QEP缓存,但我尝试OPTION (RECOMPLIE)
甚至解决方案描述here。结果仍然相同。
请帮忙!我错过了什么?
P.S。:[OBJECT_ID]
是列名,不是内置函数
P.P.S:ANOTHER_DB有不同的排序规则,这就是我需要collate database_default
select Tracking
, SoItem
from v_last_part_info
where Tracking = '4170664293'
Tracking SoItem
4170664293 20
--================================================================================--
select
lpi.Tracking
, lpi.SoItem
from v_last_part_info lpi
join ANOTHER_DB..SO_HEADER h on lpi.Tracking = h.[OBJECT_ID] collate database_default
where Tracking = '4170664293'
Tracking SoItem
4170664293 20
--================================================================================--
select
lpi.Tracking
, lpi.SoItem
from v_last_part_info lpi
join ANOTHER_DB..SO_HEADER h on lpi.Tracking = h.[OBJECT_ID] collate database_default
where [OBJECT_ID] = '4170664293'
Tracking SoItem
4170664293 10
答案 0 :(得分:0)
感谢GarethD我发现了原因。这是因为row_number()
内的v_last_part_info
函数。在MSDN上的definition:
无法保证查询返回的行使用 每次执行时,ROW_NUMBER()的排序方式都完全相同 除非以下条件成立。
- 分区列的值是唯一的。
- ORDER BY的值是唯一的。
- 分区列和ORDER BY列的值组合是唯一的。
醇>
在我的情况下,选项2没有安全保障。