对同一表结果进行外部申请(和交叉申请)

时间:2019-10-25 16:20:19

标签: sql-server cross-apply outer-apply

考虑以下脚本(对于SQL Server 2017):

declare @mytable as table (n int identity(1,1), name varchar(10),mydate  date)
insert into @mytable(name,mydate) values('a','01/01/2019')

select * from @mytable t1
cross apply (select   * from t1 ) t2;

select *,mydate from @mytable t1
cross apply (select   * from t1 ) t2

您如何解释

  1. 我要排5行

  2. 第1列和第2列的名称分别为c1和c2,而不是@mytable

  3. 中的原始名称
  4. 我没有在脚本一中获得mydate,并且只有在编写它时(*还不够)

  5. 在第2到5行中返回“这是一个文本” =>您如何解释呢?

enter image description here

1 个答案:

答案 0 :(得分:1)

您的CROSS APPLY定义为select * from t1-这不是从上面定义的别名中选择的。相反,它会查找名为t1的表并从中进行选择-这与查询的其余部分没有任何关系。

如果您要APPLY从别名表的当前行中获取值,则需要这样做

select * from @mytable t1
cross apply (select   t1.*  ) t2;

没有FROM

这与您预期的一样。