在Transact-SQL中是否有表面值?

30

根据http://www.storytotell.org/blog/2008/11/14/literal-tables-and-updates-with-joins-in-sql.html,以下内容是有效的:

SELECT * 
        FROM VALUES 
        ('Lisp', 50, true), 
        ('Scheme', 30, true), 
        ('Clojure', 1, true) 
        AS languages (name, age, lispy)

但它似乎没有起作用。

我能得到的最好结果是

With languages (name, age, lispy) as
(
    select 'Lisp', 50, 'true' union all 
    select 'Scheme', 30, 'true' union all 
    select 'Clojure', 1, 'true'
)
select * from languages

这个查询使用一个常见表达式,不如其他方法优雅。

t-sql 中是否有类似于表面值的东西?

2个回答

55

我不禁想知道为什么有人会费心,因为 UNION 的子查询可以做到同样的效果。 - OMG Ponies
OMG Ponies: 你可以在一个表值构造器中拥有1000行。我怀疑你是否能够在单个查询中将那么多行联合在一起。 - Gabe
1
出于同样的原因,当5个复制粘贴的单独查询可以完成相同的工作时,有人会费心吗。结果我错过的是括号的位置。谢谢Gabe。 - david
如何在连接的右侧使用这个文字表格形式?我似乎无法正确使用语法。 - Michael

0

我的理解是SELECT * FROM VALUES ...是标准的SQL语句,但是它不被微软的T-SQL支持。据我所知,T-SQL只支持在INSERT语句中使用VALUES ...。(即使是在SQL Server 2008之后,也仅支持多个值...)

您可以在这里查看SELECT语句的FROM子句的语法:http://msdn.microsoft.com/en-us/library/ms177634%28v=SQL.100%29.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接