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 ”,第二个应该在第一列中产生“ Up ”,在第二列中产生NULL

但是,这不会发生。第一个查询完全按照它应该的方式执行,但是将第二列添加到 SELECT 会使查询变得疯狂,导致它从看似随机的列中读出“ Down ”和日期。

这是来自同一个 T-SQL 批处理的两个结果的图像

4

1 回答 1

3

第二种情况的错误可能是由您的 ORDER BY 子句引起的,因为引擎无法评估 NULL 值的顺序。

于 2012-06-05T04:29:50.940 回答