我正在使用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”附近的语法不正确。
我想念什么?
答案 0 :(得分:4)
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
(就像您一样)。我怀疑这种行为可能是您真正想要的。
答案 1 :(得分:0)
检查以下查询。
SELECT TOP (1)
@Threshold = ISNULL([Value], 0.99)
FROM [DB]..[table1] P
WHERE P.RowId IS NOT NULL