Подтвердить что ты не робот

Существуют ли литералы таблицы в Transact-SQL?

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

4b9b3361

Ответ 1

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

Я понимаю, что SELECT * FROM VALUES ... является стандартным SQL, однако он не поддерживается Microsoft T-SQL. T-SQL, насколько мне известно, поддерживает только VALUES ... в INSERT. (И даже тогда поддерживается только несколько значений с SQL Server 2008...)

Вы можете увидеть грамматику предложения SELECT statement FROM здесь: http://msdn.microsoft.com/en-us/library/ms177634%28v=SQL.100%29.aspx