TSQL选择变量

时间:2015-08-14 20:57:38

标签: sql-server tsql

我正在做一个简单的选择'变量但不能理解第二个片段的输出。

按预期工作:

declare @tname as varchar(100) = 'F99Special_DMT';

select top(1) @tname = form_name 
from [dbo].[forms] 
where form_name > @tname

print @tname; -- output = F99Special_Physical

表单表格具有按form_name排序的行。 F99Special_Physical是最后一行的值。

declare @tname as varchar(100) = 'F99Special_Physical';

select top(1) @tname = form_name 
from [dbo].[forms] 
where form_name > @tname

print @tname; -- output = F99Special_Physical

不应该输出null吗?

感谢。

1 个答案:

答案 0 :(得分:5)

不。如果基础SELECT返回零行(当使用>最大值时会发生),则不进行任何分配,并保留变量的初始值。

您可以使用@@rowcount来检查此内容。

如果order by之前多行匹配,则需要top才能获得确定性结果。

DECLARE @tname AS VARCHAR(100) = 'F99Special_DMT';

SELECT TOP(1) @tname = form_name
FROM   [dbo].[forms]
WHERE  form_name > @tname
ORDER  BY form_name;

PRINT CASE
        WHEN @@ROWCOUNT = 1
          THEN @tname
      END;