2010-08-18 10 views
22

Según http://www.storytotell.org/blog/2008/11/14/literal-tables-and-updates-with-joins-in-sql.html¿Existen tablas literales en Transact-SQL?

es válido lo siguiente:

SELECT * 
     FROM VALUES 
     ('Lisp', 50, true), 
     ('Scheme', 30, true), 
     ('Clojure', 1, true) 
     AS languages (name, age, lispy) 

Pero no parece funcionar.

lo mejor que puedo conseguir es

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 

que utiliza una expresión de tabla común y no es tan limpio.

¿Hay algo como una tabla literal en t-sql?

Respuesta

34

Si tiene SQL Server 2008, puede utilizar en cualquier lugar se permite una tabla derivada, a pesar de que sólo le permite tener hasta 1000 filas: http://msdn.microsoft.com/en-us/library/dd776382(SQL.100).aspx

He aquí un ejemplo de la documentación (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) 

Tenga en cuenta los paréntesis alrededor de la cláusula VALUES.

+0

+1: Tengo que preguntarme por qué alguien se molestaría, cuando una subconsulta UNION hizo lo mismo. –

+0

Potros OMG: puede tener 1000 filas en un constructor de valor de tabla. Dudo que puedas unir tantas filas juntas en una sola consulta. – Gabe

+0

Por la misma razón, alguien se molestaría, cuando 5 consultas individuales pegadas copiarían lo mismo. Resulta que lo que me faltaba era la colocación del paréntesis. Gracias Gabe. – david

0

Tengo entendido que SELECT * FROM VALUES ... es SQL estándar, sin embargo, no es compatible con T-SQL de Microsoft. T-SQL, que yo sepa, solo es compatible con VALUES ... en las declaraciones INSERT. (E incluso entonces, sólo está soportado múltiples valores a partir de SQL Server 2008 ...)

se puede ver la gramática de la cláusula de un comunicado SELECTFROM aquí: http://msdn.microsoft.com/en-us/library/ms177634%28v=SQL.100%29.aspx

Cuestiones relacionadas