2016-10-05 5 views
0

元従業員のクエリを見ていて、WHERE句に-1を使用していることに気付きました。私は、-1が何をしているのか解説を見つけるためにオンラインで検索しようとしましたが、答えが見つかりません。誰でもこの-1の機能が何であるか私に説明することはできますか?なぜSQLで-1を使用するのですか

WHERE 
(
    @EmployeeId = -1 OR 
    tblReg.PurchaseOrderId IN (SELECT DISTINCT r2.PurchaseOrderId 
           FROM Registration r2 
           INNER JOIN PurchaseOrder p2 ON p2.PurchaseOrderId = r2.PurchaseOrderId 
           WHERE p2.statuscid = 1 AND r2.IsBillable = 1 AND r2.SetNonBillable = 0 AND r2.EmployeeId = @EmployeeId 
           AND r2.RegistrationDate < @EndDate AND r2.RegistrationDate >= @StartDate) 
) 
+0

このパラメータを選択しないと、パラメータは-1に設定されます。この場合、2番目の基準が使用されます。 – JohnHC

+3

おそらく「無価値」を意味する[マジックナンバー](https://en.wikipedia.org/wiki/Magic_number_(プログラミング))です。古いバージョンの.NETのようないくつかのプログラミング言語はnull値をサポートしていなかったので、-1を使用してnullを表しました。これは単なる大会ですが、特別なことを意味するものではありません。それは単なる数字です。 – vcsjones

+0

それは単なる数字です。パラメータが-1に設定されている必要があります。おそらく、特定の従業員ではなく「全従業員」のためのものでしょうか? – MatBailie

答えて

1

このタイプの構造体は、おそらく「すべての従業員を取得」を意味するために使用されます。つまり、変数@EmployeeIdの値が-1の場合、すべての従業員が戻されます。

これを処理するのがより一般的な方法はNULLである:

where (@EmployeeId is null) or 
     . . . 

あなたの同僚のバージョンがidがマイナスになることはありませんことを(おそらく安全に)想定しています。しかし、誰かが来て、IDのための新しい意味を発明することは常に可能です。 「元従業員に負の値を与えよう」などの素晴らしいアイデアは、これを破るだろう。

+0

素晴らしい!それは本当に私にすべての従業員を返す。なぜちょうど「ヌル」と書くのではないか、ちょっと混乱していたのだろうか。ありがとう! –

0

社員は、より多くのまたは1社員より等しい= -1この購入に一致する従業員が存在しないことを意味してもよいです。

これはSQLからのものではありません。これは、従業員が何かを確認するために使用したものです。

関連する問題