传递给RIGHT函数的长度参数无效

时间:2016-01-07 17:05:49

标签: sql-server tsql sql-server-2012

大约两周前,一些在过去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”,如果它以字母或数字结尾,则添加“:”,然后添加标签所用的数据值。其他方面只是在它们之间留出一个空格。

1 个答案:

答案 0 :(得分:1)

也许如果你找不到原因(它可能会破坏生产环境),你可以使用SUBSTRING重写吗?或REVERSE&的组合LEFT