我知道这里也有类似的问题,但这些问题都不是我所需要的。我有一个sproc,它的一部分执行一个视图。我有3个数据库,在设计和功能上是相同的,但数据是不同的,我只得到其中一个错误。如果我从错误的DB获取视图并在其他数据库上执行它,它就运行得很好。最奇怪的是,这个视图起作用了,然后停止了,然后修复了自己,重新开始工作,当我开始对一些数据进行更改时,它又停止了。
我把它归结为这条具体的路线;
Left(AO.Name,PATINDEX('%-%',AO.Name)-1) as ColumnName有趣的是,如果我将'%-%更改为'%',那么错误就会消失,我的SPROC就会正确地执行。
我有五个问题;
'%-%'而不是'%'时,我为什么要得到这个错误?有什么区别,什么变化是通过使用一个和另一个?任何帮助都是非常感谢的。谢谢。
发布于 2016-09-18 19:52:33
当字符串中没有连字符时,就会发生这种情况。
首先,在本例中可以用PATINDEX()替换CHARINDEX():
LEFT(AO.Name, CHARINDEX('-', AO.Name) - 1) as ColumnName这并不能解决问题,但更简单。
然后,问题是AO.Name没有连字符。在这种情况下,PATINDEX() (和CHARINDEX()也一样)返回0。减去1,该值作为LEFT()的第二个参数是非法的。
最简单的解决办法是在末尾加一个连字符:
LEFT(AO.Name, CHARINDEX('-', AO.Name + '-') - 1) as ColumnNamehttps://stackoverflow.com/questions/39561995
复制相似问题