同一查询在视图中时会带来不同的结果。
我试图强制使用相同的代码页,相同的数据类型,通用查询表达式...均无效。
看看这个简单的查询:
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
答案 0 :(得分:2)
您在SALESAX
表前加上STAGING.
,但不要在查询中为Subsidiary
表加上前缀。在查询中为所有表添加前缀。
一种可能性是有多个Subsidiary
表,并且查询在视图的上下文中使用了不同的表。
顺便说一句,在查询的SELECT
部分中为表名加上前缀的列也是一个好习惯。例如,现在很难知道列CompanyID
和SubsidiaryID
来自哪个表。
答案 1 :(得分:0)
解决方案是将DBO方案添加到辅助表中。.感谢@ VladimirBaranov,@ IMSoP和@Augustina(Codec)的建议
看起来该视图的执行上下文可能与当前用户不同(需要对此进行更多检查)。
答案 2 :(得分:-1)
除非使用显式的Order By子句,否则SQL不保证结果的顺序。