这是不是个临时表?
请帮忙看看下面代码,
1 表O的列们都没有声明,就这样能执行,为什么?
2 执行过之后,表O是不是就被清除了?因为我重新select不到它了。
3 这个表和@表变量有何不同
谢谢
SELECT *
FROM ( VALUES
(10003, '20090213', 4, 'B'),
(10004, '20090214', 1, 'A'),
(10005, '20090213', 1, 'C'),
(10006, '20090215', 3, 'C') )
AS O(orderid, orderdate, empid, custid);
------解决方案--------------------
SELECT *
FROM ( VALUES
(10003, '20090213', 4, 'B'),
(10004, '20090214', 1, 'A'),
(10005, '20090213', 1, 'C'),
(10006, '20090215', 3, 'C') )
AS O(orderid, orderdate, empid, custid);
AS O (x,y,z) 这个O不是表, 只是在语句里,给 这个行集(以你的例子为例,此行集共有4条记录)一个别名。 同样的,x,y,z也只是给这些列的一个标识。
是新的语法。
本质上跟:
select * from (select 1 as id, 'aa' as name union all select 2 as id, 'bb' as name) as O
是完全一样的,是给子查询或者中间行集的一个别名。
执行过之后0自然不存在了, 他不是实表,也不是临时表,更不是表变量。
与表变量的区别, 确切来说,这个不是表,只是语句中执行出来的一个中间结果行集,为了方便在同一语句中使用给了别名而已。 它,什么也不是。