Существуют ли литералы таблицы в 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?
Ответы
Ответ 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