T-SQL:需要前N个以总是返回N行,即使为null或空白

Jos*_*gie 2 t-sql sql-server top-n

T-SQL:需要前N个以总是返回N行,即使为null或空白

通常,命令

Select Top 5 * FROM ourTable
Run Code Online (Sandbox Code Playgroud)

将返回最多5行,但更少,具体取决于行是否存在。

我想确保它总是返回5行(或通常为N行)。实现此目的的语法是什么?

这个想法是将“ FirstOrDefault”的LINQ概念概括为“ First_N_OrDefault”,但是使用TSQL而不是LINQ。

显然,“额外”行将具有空列或空列。

这适用于使用SSMS 14.0.17的Microsoft SQL Server 2014

我想尽可能使用“ TOP”语法,因此它不同于可能的重复语法。而且,如下所述,这可能是可以在系统的不同层上解决的问题,但是对于TSQL也很高兴。

GSe*_*erg 5

select top (5) c1, c2, c3 from (
  select top (5) c1, c2, c3, 0 as priority from ourTable
  union all
  select c1, c2, c3, 1 from (values (null, null, null), (null, null, null), (null, null, null), (null, null, null), (null, null, null)) v (c1, c2, c3)
) t
order by priority
Run Code Online (Sandbox Code Playgroud)