T-SQL Set Variable IF запись существует - PullRequest
1 голос
/ 24 мая 2019

Я использую SQL Server. Я хочу установить переменную на основе выбора, но только если есть запись в table1. Если записи нет, просто верните 0,99

Я использую этот код, но он не работает:

DECLARE @Threshold AS FLOAT

SET @Threshold = IF EXISTS (SELECT TOP 1 * 
                            FROM [DB]..[table1] P 
                            WHERE P.RowId IS NOT NULL)
    SELECT [Value] 
    FROM [DB]..[table1]
ELSE 
    SELECT 0.99

Я получаю ошибку:

Неверный синтаксис рядом с ключевым словом if.

Чего мне не хватает?

Ответы [ 2 ]

4 голосов
/ 24 мая 2019

Один метод в T-SQL:

declare @Threshold float;

if (exists (select top 1 * from [DB]..[table1] P where P.RowId IS NOT NULL))
begin
    select @Threshold = [Value] 
    from [DB]..[table1]
end;
else select @Threshold = 0.99;

Лично я думаю, что это довольно многословно. Вы можете просто сделать:

declare @Threshold float;

select @Threshold = coalesce(max([Value]), 0.99)
from [DB]..[table1]
where P.RowId is not null;

Это работает, потому что запрос агрегации без group by всегда возвращает одну строку. Если ничего не найдено, тогда столбцы NULL.

Это не на 100% эквивалентно, поскольку строка может существовать со значением NULL. Эта версия будет назначать 0.99, а не NULL (как у вас). Я подозреваю, что такое поведение может быть тем, что вы действительно хотите.

0 голосов
/ 24 мая 2019

отметьте ниже запрос.

SELECT TOP (1)
  @Threshold = ISNULL([Value], 0.99)
FROM [DB]..[table1] P
WHERE P.RowId IS NOT NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...