Transact-SQL中是否有表格文字?

时间:2010-08-18 01:37:02

标签: sql sql-server tsql

根据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 个答案:

答案 0 :(得分:43)

如果你有SQL Server 2008,你可以在允许派生表的任何地方使用它,尽管它只允许你拥有最多1000行:http://msdn.microsoft.com/en-us/library/dd776382(SQL.100).aspx

以下是文档(http://msdn.microsoft.com/en-us/library/ms177634(SQL.100).aspx)中的示例:

SELECT *
FROM (
    VALUES (1, 2),
           (3, 4),
           (5, 6),
           (7, 8),
           (9, 10)
) AS MyTable(a, b)

请注意VALUES子句的括号。

答案 1 :(得分:0)

我的理解是SELECT * FROM VALUES ...是标准SQL,但微软的T-SQL不支持它。据我所知,T-SQL仅支持VALUES ...语句中的INSERT。 (即便如此,从SQL Server 2008开始只支持多个值...)

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