大约两周前,一些在过去6个月内一直运行的SQL开始抛出错误而没有任何变化。我花了几天时间试图找出发生了什么事情,这没有任何意义。
最后,我在存储过程中尝试了一个“更改”(没有效果)然后最终删除并重新创建它(确实修复了它)。
然后,2天前,错误又回来了,这次甚至drop / create都没有修复它。根据我的IT人员的说法,他们没有在1.5个月内修补SQL Server,因此没有任何改变。有没有人有任何想法或有同样的问题?
这行代码,在存储过程中:
SELECT LabelText + Data
FROM CU_FormLayout fl
INNER JOIN CU_Data dat ON dat.LayoutId = fl.Id
CROSS APPLY (SELECT RIGHT(fl.xLabelText,1) RightChar) ca2
CROSS APPLY (SELECT CASE WHEN ASCII(RightChar) BETWEEN 49 AND 57 OR
ASCII(RightChar) BETWEEN 65 AND 90 OR
ASCII(RightChar) BETWEEN 97 AND 122
THEN fl.xLabelText + ': '
ELSE fl.xLabelText + ' ' END LabelText) ca1
导致此错误:
传递给RIGHT函数的长度参数无效。
如您所见,唯一的RIGHT()
具有硬编码长度。它怎么可能无效?
BTW,这段代码的一点是它从一列中取出“Label”,如果它以字母或数字结尾,则添加“:”,然后添加标签所用的数据值。其他方面只是在它们之间留出一个空格。
答案 0 :(得分:1)
也许如果你找不到原因(它可能会破坏生产环境),你可以使用SUBSTRING
重写吗?或REVERSE
&的组合LEFT
。