是否可以在不使用表变量或临时表的情况下创建一个常规表?

url*_*der 2 t-sql sql-server sql-server-2008

我有一个表A需要加入表B.

表B是2列的常数

year, flag
----------
2010, A1
2011, A2
2012, A3
2013, A4
2014, A5
Run Code Online (Sandbox Code Playgroud)

是否有可能做类似下面的事情(*sql server中的语法无效,只是用它来表示我的意思):

SELECT *
FROM A RIGHT JOIN (
   2010, 'A1';
   2011, 'A2';
   2012, 'A3';
   2013, 'A4';
   2014, 'A5';
)
B ON A.year = B.year
Run Code Online (Sandbox Code Playgroud)

我不想将表变量或临时表用于B.还有其他选择吗?

谢谢

Mar*_*ith 6

是的,您可以使用VALUES在计划中创建一个文字值表

SELECT *
FROM   A
       RIGHT JOIN ( VALUES(2010, 'A1'),
                          (2011, 'A2'),
                          (2012, 'A3'),
                          (2013, 'A4'),
                          (2014, 'A5') ) B(year, flag)
         ON A.year = B.year 
Run Code Online (Sandbox Code Playgroud)

但是,此表未编入索引,并且限制为最多1000行.

  • @MuhammedAli - 它只是带有'UNION ALL`的派生表的语法糖.这些虚拟表[用于从头开始生成数字表](http://dba.stackexchange.com/q/7233/3690),但不查询系统对象.交叉连接实际表会锁定[可能有不良结果](http://stackoverflow.com/q/20155337/73226) (2认同)