我有一个视图,在该视图中我无权对其进行修改,并且我必须进行SELECT查询,该查询使我的行中的列为空(空,不为null)
在这种情况下,我有:
Oid| Name | Email | Phone
此视图上的总记录超过980,000行。
这是我尝试过的:
SELECT DISTINCT * FROM View WHERE Phone = ''
SELECT DISTINCT * FROM View WHERE datalength(Phone)<1
SELECT DISTINCT * FROM View WHERE Len(Phone)<1
在所有这些错误中,我都会得到错误:
[Err] 21000 - [SQL Server]Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
如果我进行选择而不尝试获取“电话”中的空行,那么我也尝试检查某些Oid是否重复:
SELECT
Oid, COUNT(*)
FROM
View
GROUP BY
Oid
HAVING
COUNT(*) > 1
但是我没有结果(没有重复)
有趣的是,如果我制作了TOP 1000(在电话中找到空白),它可以工作,所以我不知道发生了什么。
我做错了什么?
答案 0 :(得分:0)
正如评论所暗示的,这里的问题将在视图中。可能不会立即显而易见的是,从视图中读取的执行计划可能会根据您所应用的条件而千差万别。在这种情况下,我假设Phone是由子查询生成的。该视图将假定子查询仅返回一行。如果在没有电话的情况下查询视图,则子查询将永远不会执行。
如果需要电话,则会执行子查询,从而导致错误。
尝试在打开执行计划的情况下运行它们,这应该有助于您了解问题所在。
这是您可以充分利用的功能,我经常使用它来有条件地依赖于依赖于参数的表进行连接。