2016-10-05 19 views
1

私はこのようなSQL Serverの手順があります。実行にメッセージ102、レベル15、状態1つの近くに無効な構文「>」

//Beginning of procedure 
    SELECT 
      CASE IDNumber 
       WHEN (DATALENGTH(IDNumber)>7) 
        THEN SUBSTRING(IDNumber,0,6) 
       WHEN (DATALENGTH(IDNumber) < 7) 
        THEN CONCAT((REPLICATE(0,7-LEN(IDNumber)),IDNumber) 
      END AS NID 

//Rest of the procedure here 

コードが行WHEN (DATALENGTH(IDNumber)>7)にエラーIncorrect syntax near '>'.をスローします。

IDNumberは、nvarcharです。私はLEN(IDNumber)を使ってみましたが無駄でした。 私はエラーが何であるか分かりません!

+0

はCASE後すぐIDNumberを削除するときに値を提供する必要があります。また、括弧は必要ない(DATALENGTH ....)が、何も傷つけていない。 – scsimon

答えて

3
は、そのようなあなたのクエリを書き直し

SELECT CASE 
     WHEN DATALENGTH(IDNumber) > 7 THEN SUBSTRING(IDNumber, 0, 6) 
     WHEN DATALENGTH(IDNumber) < 7 THEN CONCAT(REPLICATE(0, LEN(IDNumber)), IDNumber) 
    END AS NID; 

あなたがCASE Columnを書くとき、あなたはない式に、直接値と比較する必要があります。

+0

REPLICATE機能2つの引数が必要です。 CONCAT(レプリケート(0,7、LEN(IDNumber))、IDNumber)を変更する必要があります –

+0

それを更新してください。おかげで –

+0

ありがとう。ですから、いつ[列または式]を選択するには、式または列名を指定する必要がありますか?それとも、それは適切な方法ではありませんか? –

0

あなたがケースの変数を持っているなら、あなたは一部、ない状態

関連する問題