存在T-SQL设置变量IF记录

时间:2019-05-24 10:50:46

标签: sql-server tsql

我正在使用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 个答案:

答案 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