考虑以下脚本(对于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
您如何解释
我要排5行
第1列和第2列的名称分别为c1和c2,而不是@mytable
我没有在脚本一中获得mydate,并且只有在编写它时(*
还不够)
在第2到5行中返回“这是一个文本” =>您如何解释呢?
答案 0 :(得分:1)
您的CROSS APPLY
定义为select * from t1
-这不是从上面定义的别名中选择的。相反,它会查找名为t1
的表并从中进行选择-这与查询的其余部分没有任何关系。
如果您要APPLY
从别名表的当前行中获取值,则需要这样做
select * from @mytable t1
cross apply (select t1.* ) t2;
没有FROM
。
这与您预期的一样。