2017-08-14 144 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]