我正在对变量进行简单的"选择"但不能理解第二个片段的输出.
按预期工作:
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
Run Code Online (Sandbox Code Playgroud)
表格表格具有按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
Run Code Online (Sandbox Code Playgroud)
它不应该输出null吗?
谢谢.
不.如果底层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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1676 次 |
| 最近记录: |