2017-08-14 23 views
0

私は、SQL ServerのストアドプロシージャにSSRSから名前のリストを渡しているが、私はエラーを取得しています:無効な長さのパラメータエラー

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

?私はそれを最初に検証するだろう。 1つ以上が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]


しかし、私はあなたの問題は、このようなものであるべきだと思う:すべての名前は36+の文字を持っていますか

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

[SQL Fiddle Demo]

関連する問題