代码之家  ›  专栏  ›  技术社区  ›  david

Transact-SQL中是否有表文字?

  •  25
  • david  · 技术社区  · 15 年前

    根据 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
    

    它使用了一个通用的表表达式,并不是很整洁。

    2 回复  |  直到 15 年前
        1
  •  53
  •   Gabe Timothy Khouri    15 年前

    如果您有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

        2
  •  0
  •   Thanatos    15 年前

    我的理解是 SELECT * FROM VALUES ... 是标准SQL,但是Microsoft的T-SQL不支持它。据我所知,T-SQL只支持 VALUES ... 在里面 INSERT 声明(即使如此,从SQL Server 2008开始只支持多个值…)

    SELECT 对账单 FROM 条款如下: http://msdn.microsoft.com/en-us/library/ms177634%28v=SQL.100%29.aspx