传递给 LEFT 或 SUBSTRING 函数的长度参数无效 4
Invalid length parameter passed to the LEFT or SUBSTRING function 4
我知道这里有类似的问题,但 none 正是我需要的。我有一个 SQL 存储过程,它的一部分执行一个视图。我有 3 个在设计和功能上相同的数据库,但数据不同,我只在其中一个上收到此错误。如果我从错误的数据库中获取视图并在其他数据库中执行它,它运行得很好。最奇怪的是,这个视图工作了,然后停止了,然后自我修复并再次开始工作,当我开始对一些数据进行更改时,它又停止了。
我已经把它归结为这一行;
Left(AO.Name,PATINDEX('%-%',AO.Name)-1) as ColumnName
有趣的是,如果我将 '%-%
更改为 '%'
,错误就会消失并且我的 SPROC 会正确执行。
我有五个问题;
当我有 '%-%'
但没有 '%'
时,为什么会出现此错误?使用一个与另一个相比,有什么区别?有什么样的变化?
这个错误是什么意思?
为什么完全相同的视图可以在其他两个相同的数据库上正常工作,但不能在这个数据库上正常工作?
为什么这会在工作后停止工作,然后以某种方式自我修复,然后在一些数据操作后再次崩溃?
我可以使用 PATINDEX 之外的更好方法吗?
感谢任何帮助。谢谢你。
当字符串中没有连字符时会发生这种情况。
首先,在这种情况下,您可以将 PATINDEX()
替换为 CHARINDEX()
:
LEFT(AO.Name, CHARINDEX('-', AO.Name) - 1) as ColumnName
这并没有解决问题,但遵循起来更简单。
那么,问题是AO.Name
没有连字符。在那种情况下 PATINDEX()
(和 CHARINDEX()
也是)returns 0。您减去 1,该值作为 LEFT()
.
的第二个参数是非法的
最简单的解决方案是在末尾加上一个连字符:
LEFT(AO.Name, CHARINDEX('-', AO.Name + '-') - 1) as ColumnName
我知道这里有类似的问题,但 none 正是我需要的。我有一个 SQL 存储过程,它的一部分执行一个视图。我有 3 个在设计和功能上相同的数据库,但数据不同,我只在其中一个上收到此错误。如果我从错误的数据库中获取视图并在其他数据库中执行它,它运行得很好。最奇怪的是,这个视图工作了,然后停止了,然后自我修复并再次开始工作,当我开始对一些数据进行更改时,它又停止了。
我已经把它归结为这一行;
Left(AO.Name,PATINDEX('%-%',AO.Name)-1) as ColumnName
有趣的是,如果我将 '%-%
更改为 '%'
,错误就会消失并且我的 SPROC 会正确执行。
我有五个问题;
当我有
'%-%'
但没有'%'
时,为什么会出现此错误?使用一个与另一个相比,有什么区别?有什么样的变化?这个错误是什么意思?
为什么完全相同的视图可以在其他两个相同的数据库上正常工作,但不能在这个数据库上正常工作?
为什么这会在工作后停止工作,然后以某种方式自我修复,然后在一些数据操作后再次崩溃?
我可以使用 PATINDEX 之外的更好方法吗?
感谢任何帮助。谢谢你。
当字符串中没有连字符时会发生这种情况。
首先,在这种情况下,您可以将 PATINDEX()
替换为 CHARINDEX()
:
LEFT(AO.Name, CHARINDEX('-', AO.Name) - 1) as ColumnName
这并没有解决问题,但遵循起来更简单。
那么,问题是AO.Name
没有连字符。在那种情况下 PATINDEX()
(和 CHARINDEX()
也是)returns 0。您减去 1,该值作为 LEFT()
.
最简单的解决方案是在末尾加上一个连字符:
LEFT(AO.Name, CHARINDEX('-', AO.Name + '-') - 1) as ColumnName