1

考虑以下脚本(使用 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. 我没有在脚本一中得到 mydate 并且只有在我编写它时才会得到它(*还不够)

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

在此处输入图像描述

4

1 回答 1

2

您的CROSS APPLY定义是select * from t1- 这不是从上面定义的别名中选择的。相反,它会查找一个被调用的表t1并从中进行选择——这与查询的其余部分无关。

如果您想获取APPLY别名表当前行中的值,则需要执行

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

没有FROM.

这与您预期的一样。

于 2019-10-25T17:06:49.917 回答