0

我意识到这里有类似的问题,但它们都不是我所需要的。我有一个 SQL 存储过程,它的一部分执行一个视图。我有 3 个设计和功能相同的数据库,但数据不同,我只在其中一个上收到此错误。如果我从出错的数据库中获取视图并在其他数据库中执行它,它运行得很好。最奇怪的是,这个视图工作了,然后停止了,然后自行修复并再次开始工作,当我开始对某些数据进行更改时,它又停止了。

我已将其归结为这一特定行;

Left(AO.Name,PATINDEX('%-%',AO.Name)-1) as ColumnName

有趣的部分是如果我更改'%-%'%'错误消失并且我的 SPROC 正确执行。

我有五个问题;

  1. 当我有'%-%'但没有时,为什么会出现此错误'%'?使用一个与另一个有什么区别和什么样的变化?

  2. 这个错误是什么意思?

  3. 为什么完全相同的视图可以在另外两个相同的数据库上正常工作,而在这个数据库上却不行?

  4. 为什么它会在它工作后停止工作,然后以某种方式修复自己,然后在一些数据操作后再次破坏自己?

  5. 我可以使用 PATINDEX 之外的更好方法吗?

任何帮助表示赞赏。谢谢你。

4

1 回答 1

0

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

首先,您可以在这种情况下替换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 ColumnName
于 2016-09-18T19:52:33.163 回答