如何解决使用TOP-时出现T-SQL查询错误,但拉出完整查询时不会出现T-SQL查询错误
Azure SQL服务器中的一个视图有错误-但仅在使用TOP时出现。
-
SELECT * FROM View
=很好。 -
SELECT [list every column individually] FROM View
=很好 - 从视图中获取基础代码并运行= fine。
仅包含导致错误的TOP(所有内容)。甚至SELECT TOP (1) * FROM View
-反复出现错误。
(并不是我的团队中的每个人都同时忘记了TOP的语法-另外,当通过SSMS界面选择SELECT TOP 1000...
时,它也会这样做)。
具体错误是:
消息537,级别16,状态3,行1。无效的长度参数传递给LEFT或SUBSTRING函数。
可以肯定的是-在查询中可能是一个错误:有些东西被分隔符分隔,但是需要在WHERE子句中删除缺少该分隔符的条目。
但是为什么只在使用TOP时才抛出此错误?我有点茫然。
解决方法
最可能的原因是select top
更改了执行计划-可能是因为选择了列。
然后,可能会发生以下两种情况之一:
-
表中的某些行会产生错误,但不在初始执行计划的结果集中。您不会在第一个查询中看到错误,因为它们尚未返回该行。但是更改后的执行计划会更快地返回该行。
-
SQL Server在执行图中推了一个谓词。该行可能会被过滤掉,但与此同时。 。 。它会产生错误。
此外,这些很难弄清楚。但是,该代码可能对left()
或substring()
进行了明显的调用,从而导致了问题。如果您找到导致问题的代码,则修复它应该非常简单。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。