问题描述
Azure sql服务器中的一个视图有错误-但仅在使用TOP时出现。
仅包含导致错误的TOP(所有内容)。甚至SELECT TOP (1) * FROM View
-反复出现错误。
(并不是我的团队中的每个人都同时忘记了TOP的语法-另外,当通过SSMS界面选择SELECT TOP 1000...
时,它也会这样做)。
具体错误是:
消息537,级别16,状态3,行1。无效的长度参数传递给LEFT或SUBSTRING函数。
可以肯定的是-在查询中可能是一个错误:有些东西被分隔符分隔,但是需要在WHERE子句中删除缺少该分隔符的条目。
解决方法
最可能的原因是select top
更改了执行计划-可能是因为选择了列。
然后,可能会发生以下两种情况之一:
-
表中的某些行会产生错误,但不在初始执行计划的结果集中。您不会在第一个查询中看到错误,因为它们尚未返回该行。但是更改后的执行计划会更快地返回该行。
-
SQL Server在执行图中推了一个谓词。该行可能会被过滤掉,但与此同时。 。 。它会产生错误。
此外,这些很难弄清楚。但是,该代码可能对left()
或substring()
进行了明显的调用,从而导致了问题。如果您找到导致问题的代码,则修复它应该非常简单。