Существуют ли табличные литералы в Transact-SQL? - PullRequest
26 голосов
/ 18 августа 2010

Согласно 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 ]

44 голосов
/ 18 августа 2010

Если у вас есть 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.

0 голосов
/ 18 августа 2010

Насколько я понимаю, 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...