2013-04-04 2 views
4

У меня есть следующий SQL запрос сервера:SQL Server Query Странная Выход

SELECT ISNULL(MIN(P), 999) AS FLD 
FROM (SELECT '0' AS P) AS T 
WHERE (1 > 4) 

Как прийти выход этого запроса '*'?

Пожалуйста, объясните

Благодаря

ответ

11

ISNULL использует тип данных первого аргумента.

Это varchar(1), как это тип данных буквального '0'

999 будет обрезано так SQL SERVER появится надпись '*'

+0

насчет 1> 4? SELECT ISNULL (MIN ('0'), 999) ГДЕ 1> 4 дает '*', но SELECT ISNULL ('0', 999) ГДЕ 1> 4 дает пустой результат! –

+0

@ Scorpi0 Агрегаты без 'GROUP BY' или' HAVING' всегда будут возвращать ровно одну строку. Это скалярный агрегат (в отличие от векторного агрегата). Скалярный агрегат 'MIN' на пустом результирующем наборе вернет' NULL' –

+0

Я все еще запутался. SELECT ISNULL (MIN ('0'), 999) выводит '0'. тот факт, что нет предложения WHERE, изменило характер оператора MIN? –