Ваша проблема в том, что ваш CASE
оценивается только для существующих строк, если ваша таблица пуста, вы не получите вообще никакой записи.
Но вы хотите получить запись с сообщением, даже если таблица пуста, поэтому вы должны создать эту строку. Вы можете сделать это, используя UNION
, чтобы добавить новую строку в набор результатов, только когда PS_MASTER_ITEM_EC
пуст.
Итак, вы можете просто перечислить все свои записи, если они есть, и показать свое сообщение, когда PS_MASTER_ITEM_EC
пусто.
SELECT EC.INV_ITEM_ID
FROM PS_MASTER_ITEM_EC EC
ORDER BY INV_ITEM_ID
UNION ALL
SELECT 'NO ITEMS IN STAGING TABLES'
WHERE NOT EXISTS(SELECT TOP 1 'X' X FROM PS_MASTER_ITEM_EC )
Обратите внимание, вам нужно, чтобы столбец INV_ITEM_ID
имел тип char / varchar / nvarchar, иначе вы получите сообщение об ошибке. Если ваш INV_ITEM_ID
- это номер, вы можете использовать этот обходной путь:
SELECT EC.INV_ITEM_ID, NULL Message
FROM PS_MASTER_ITEM_EC EC
ORDER BY INV_ITEM_ID
UNION ALL
SELECT NULL INV_ITEM_ID, 'NO ITEMS IN STAGING TABLES' Message
WHERE NOT EXISTS(SELECT TOP 1 'X' X FROM PS_MASTER_ITEM_EC )