首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递给左侧或SUBSTRING函数4的无效长度参数

传递给左侧或SUBSTRING函数4的无效长度参数
EN

Stack Overflow用户
提问于 2016-09-18 19:50:25
回答 1查看 197关注 0票数 0

我知道这里也有类似的问题,但这些问题都不是我所需要的。我有一个sproc,它的一部分执行一个视图。我有3个数据库,在设计和功能上是相同的,但数据是不同的,我只得到其中一个错误。如果我从错误的DB获取视图并在其他数据库上执行它,它就运行得很好。最奇怪的是,这个视图起作用了,然后停止了,然后修复了自己,重新开始工作,当我开始对一些数据进行更改时,它又停止了。

我把它归结为这条具体的路线;

代码语言:javascript
复制
Left(AO.Name,PATINDEX('%-%',AO.Name)-1) as ColumnName

有趣的是,如果我将'%-%更改为'%',那么错误就会消失,我的SPROC就会正确地执行。

我有五个问题;

  1. 当我有'%-%'而不是'%'时,我为什么要得到这个错误?有什么区别,什么变化是通过使用一个和另一个?
  2. 这个错误意味着什么?
  3. 为什么完全相同的视图在另外两个相同的数据库上正常工作,而不是在这个数据库上呢?
  4. 为什么它在工作后停止工作,然后以某种方式修复自己,然后在某些数据操作之后再次崩溃?
  5. 除了PATINDEX,还有更好的方法吗?

任何帮助都是非常感谢的。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-18 19:52:33

当字符串中没有连字符时,就会发生这种情况。

首先,在本例中可以用PATINDEX()替换CHARINDEX()

代码语言:javascript
复制
LEFT(AO.Name, CHARINDEX('-', AO.Name) - 1) as ColumnName

这并不能解决问题,但更简单。

然后,问题是AO.Name没有连字符。在这种情况下,PATINDEX() (和CHARINDEX()也一样)返回0。减去1,该值作为LEFT()的第二个参数是非法的。

最简单的解决办法是在末尾加一个连字符:

代码语言:javascript
复制
LEFT(AO.Name, CHARINDEX('-', AO.Name + '-') - 1) as ColumnName
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39561995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档