2016-09-18 96 views
0

私はここに同様の質問があることを認識していますが、それらのどれも私が必要とするものではありません。私はそれの一部がビューを実行するSQL sprocを持っています。私は設計と機能が同じ3つのデータベースを持っていますが、データは異なっており、私はそのうちの1つのみでこのエラーを受けています。エラーのあるDBからビューを取得して他のビューで実行すると、正常に動作します。最も奇妙な部分は、このビューが動作し、停止してから、それ自体を修正して作業を再開し、一部のデータを変更したときに再び停止したことです。LEFTまたはSUBSTRING関数に無効な長さパラメータが渡されました4

私はこの特定の行まで煮詰めました。

Left(AO.Name,PATINDEX('%-%',AO.Name)-1) as ColumnName 

私はエラーが表示されなくなり、私のSPROCが適切に実行さ'%'する'%-%を変更した場合、興味深い部分があります。

私には5つの質問があります。私は'%-%'なく'%'を持っている場合

  1. は、なぜ私はこのエラーを取得していますか?どのような違いがあり、どのような変化が他のものを使って行われるのか?

  2. このエラーは何を意味しますか?

  3. 全く同じビューは、2つの他の同じデータベースでは正しく動作しますが、これは正しく動作しません。

  4. なぜこれが機能してから機能しなくなるのでしょうか?何らかの形でデータが修正され、データ操作後に再び機能が停止するのはなぜですか?

  5. 私が使用できるPATINDEX以外の方法がありますか?

何か助けていただければ幸いです。ありがとうございました。

+0

'PATINDEXは()' SQL Serverを示唆しているので、私は、SQL Serverのタグを追加しました。 –

答えて

0

これは、文字列にハイフンがない場合に発生します。問題を解決するが、従うことが簡単ですしない

LEFT(AO.Name, CHARINDEX('-', AO.Name) - 1) as ColumnName 

まず、あなたがこのケースでCHARINDEX()PATINDEX()を置き換えることができます。

次に、問題は、にハイフンがないことです。その場合、PATINDEX()(とCHARINDEX()も)は0を返します.1を減算し、値はLEFT()の2番目の引数として不正です。

最も簡単な解決策は、末尾にハイフンを入れることです:

LEFT(AO.Name, CHARINDEX('-', AO.Name + '-') - 1) as ColumnName 
+0

これまでのところ、これはそれを修正するように見えます。私はそれを変更して以来、私はエラーを見ていない。私は他の2つのDBの変更を行い、私が得たものを見るつもりです。 – inFAM1S

関連する問題