0

次のクエリがあります。

1

SELECT TOP 1
    CASE WHEN latency=-1
        THEN 'Down'
        ELSE 'Up'
    END AS status
FROM
    @pings_temp
ORDER BY datetime DESC;

2

SELECT TOP 1
    CASE WHEN latency=-1
        THEN 'Down'
        ELSE 'Up'
    END AS status,
    CASE WHEN latency=-1
        THEN
        (
            SELECT TOP 1
                datetime
            FROM
                @downtimes_temp
            ORDER BY
                datetime DESC
        )
        ELSE NULL
    END AS datetime
FROM
    @pings_temp
ORDER BY datetime DESC;

最初の列は ' Up ' のみを生成し、2 番目の列は最初の列で ' Up ' を生成し、2 番目の列でNULLを生成する必要があります

ただし、これは起こりません。最初のクエリは正確に実行されますが、2 番目の列を SELECT に追加すると、クエリが暴走し、一見ランダムな列から' Down ' と日付が読み取られます。

同じ T-SQL バッチからの 2 つの結果の画像を次に示します。

4

1 に答える 1

3

エンジンは NULL 値の順序を評価できないため、2 番目のケースのエラーはおそらく ORDER BY 句が原因です。

于 2012-06-05T04:29:50.940 に答える