1

ProjectNum column含む がありstring data typeます。通常、番号は ですX1234...が、番号が割り当てられていない場合は自動生成する必要があり、プロジェクトに割り当てられた優先度に応じて、それが で始まるかどうかが決まりますC or FC or Fしたがって、自動生成された番号は、6 桁の数字で始まり、その後に自動インクリメントする必要があります。だからここに私の質問があります...

SELECT MAX(CINT(RIGHT(ProjectNum, 6))) AS LastDigits
FROM project_master_query
WHERE ((ProjectNum LIKE (IIF([@priorityDefID] = 4, "C*", "F*"))));

これにより、最後に自動インクリメントされた数値を取得でき、コードで 1 を追加して数値を自動生成できます@priorityDefID of 4。 、エラーが表示されます"This expression is typed incorrectly, or it is too complex to be evaluated.。たとえば、数値式に複雑な要素が多すぎる可能性があります。式の一部を変数に代入して、式を単純化してみてください。」

なぜこれが I pass 4 になるのかよくわかりませんが、1、2、または 3 は問題なく動作し、正しい値を返します。私は書く代わりにMAX、CまたはFで始まるそれらすべてをつかみ、次に正しい6桁をつかみ、降順にして上位1をつかむことを考えていましたか?

4

1 に答える 1

1

そのクエリには多くの問題があり、何が起こっているのかよくわからないので、どこから始めればよいかわかりません。CInt()ただし、6桁 で使用する危険性について警告することができます. 最大整数値は 32,767 でCInt("999999")あるため、オーバーフロー エラーがスローされます。最大長整数値は 2,147,483,647 であるため、より安全に使用できます。したがって、長整数は可能なすべての 6 桁の値に対応します。CLng

その問題は現在ProjectNumの価値観の問題の原因ではないかもしれませんが、将来、より多くのProjectNum価値を保存するにつれて、それはあなたを苦しめる可能性があるものです.

「[エラーメッセージ] I pass 4, but a 1, 2 or 3 work fine and return the correct value」について、 「現時点では、データベースに 'C' で始まるものはありません」とも言いました。 . つまり、その状況ではクエリは行を返しません。Nullエラー の無効な使用をトリガーするRIGHT(ProjectNum, 6)ため、問題が発生すると思われ ます。Right(Null, 6)

"C"ProjectNumで始まるa を含む行を追加した後、エラーがなくなるかどうかを確認します。

于 2013-05-17T13:42:01.977 に答える