2010-08-18 14 views
22

Secondo http://www.storytotell.org/blog/2008/11/14/literal-tables-and-updates-with-joins-in-sql.htmlEsistono valori letterali di tabella in Transact-SQL?

vale quanto segue:

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

Ma non sembra funzionare.

il meglio che posso ottenere è

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 

che utilizza un'espressione di tabella comune e non è così pulito.

C'è qualcosa come un letterale di tabella in t-sql?

risposta

34

Se si dispone di SQL Server 2008, è possibile utilizzare ovunque una tabella derivata è consentito, anche se permette solo di avere fino a 1000 righe: http://msdn.microsoft.com/en-us/library/dd776382(SQL.100).aspx

Ecco un esempio dalla documentazione (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) 

Nota le parentesi attorno alla clausola VALUES.

+0

+1: Devo chiedermi perché qualcuno si preoccupi, quando un subquery di UNION fa lo stesso. –

+0

Ponies OMG: puoi avere 1000 righe in un costruttore di valori tabella. Dubito che puoi unire tante righe insieme in una singola query. – Gabe

+0

Per lo stesso motivo per cui qualcuno dovrebbe preoccuparsi, quando 5 copiate le singole query incollate farebbe lo stesso. Si scopre che quello che mi mancava era il posizionamento della parentesi. Grazie, Gabe. – david

0

La mia comprensione è che SELECT * FROM VALUES ... è SQL standard, tuttavia, non è supportato da T-SQL di Microsoft. T-SQL, per quanto ne so, supporta solo VALUES ... nelle dichiarazioni INSERT. (E anche allora, supportato solo più valori come di SQL Server 2008 ...)

si può vedere la grammatica dei FROM clausola di una dichiarazione SELECT qui: http://msdn.microsoft.com/en-us/library/ms177634%28v=SQL.100%29.aspx

Problemi correlati