2017-08-14 142 views
0

我传递的名单从SSRS到SQL Server存储过程,但我得到一个错误:无效的长度参数错误

Invalid length parameter passed to the LEFT or SUBSTRING function

这是我的代码:

Select substring(item, 1, LEN(item) - 36) 
From dbo.fnsplit(@manager, ',') 

子字符串的原因是删除附加到经理名称末尾的36个字符的GUID。名字传递这样的:

John Smith, Tom Perry 

我读过的错误可能是由空间造成的,但我无法弄清楚如何解决这个问题。

+0

是否所有的名字都有36+字符?我会先核实一下。有可能一个或多个字符小于36,并且您将从不具有36个字符的字符串中删除36个字符。 – milton

回答

2

只需使用case

Select (CASE WHEN len(item) <= 36 THEN item 
      ELSE LEFT(item, LEN(item)-36) 
     END) 
from dbo.fnsplit(@manager, ',') 
0

如果你真的想从去年右侧36个字符在所有情况下删除!?所以,我认为这个黑客版本应该可以工作;)。

select 
    replace(item, right(item, 36), '') 
from 
    dbo.fnsplit(@manager, ','); 

Note: Actually I take 36 characters from right side of text then remove it by replacing with '' ;).

[SQL Fiddle Demo]


不过我觉得你的问题应该是这样的:

select 
    left(item, abs(len(item + ',') - 37)) 
from 
    dbo.fnsplit(@manager, ','); 

[SQL Fiddle Demo]