怪异的查询行为:同一查询,在视图内时结果不同

时间:2019-05-08 09:53:39

标签: sql sql-server sql-server-2017 sql-view

同一查询在视图中时会带来不同的结果。

我试图强制使用相同的代码页,相同的数据类型,通用查询表达式...均无效。

看看这个简单的查询:

SELECT TOP 100 CompanyID, SubsidiaryID 
FROM STAGING.SALESAX S
INNER JOIN Subsidiary SU
ON S.CompanyID = SU.SubsidiaryAXCode

它返回所有预期的100行。

如果我在视图中使用EXACT SAME QUERY

CREATE VIEW [STAGING].[VSalesAXBASE]    
AS    
SELECT TOP 100 CompanyID, SubsidiaryID 
FROM STAGING.SALESAX S
INNER JOIN Subsidiary SU
ON S.CompanyID = SU.SubsidiaryAXCode

GO

SELECT * FROM [STAGING].[VSalesAXBASE]

它返回0 ROWS

screenshots of me running the query in two ways

Screenshot of query updated without TOP Statement

3 个答案:

答案 0 :(得分:2)

您在SALESAX表前加上STAGING.,但不要在查询中为Subsidiary表加上前缀。在查询中为所有表添加前缀。

一种可能性是有多个Subsidiary表,并且查询在视图的上下文中使用了不同的表。

顺便说一句,在查询的SELECT部分中为表名加上前缀的列也是一个好习惯。例如,现在很难知道列CompanyIDSubsidiaryID来自哪个表。

答案 1 :(得分:0)

解决方案是将DBO方案添加到辅助表中。.感谢@ VladimirBaranov,@ IMSoP和@Augustina(Codec)的建议

看起来该视图的执行上下文可能与当前用户不同(需要对此进行更多检查)。

Solution

答案 2 :(得分:-1)

除非使用显式的Order By子句,否则SQL不保证结果的顺序。