2013-04-12 19 views
6

Se posso fare la seguente dichiarazione prescelta per creare una tabella con un valoreSimulare una tabella con più righe solo con SELECT

SELECT 'myname' AS 'Name' 

questo restituirà una tabella con la colonna = Nome e una value = mionome

come posso risolvere questo per tornare una colonna con più valori da solo l'istruzione select

io non voglio fare questo:

DECLARE @tmp TABLE (Name varchar(50)) 

INSERT INTO @tmp (Name) VALUES ('myname1'),('myname2') 
    SELECT * FROM @tmp 

Basta da un unico SELECT dichiarazione, se possibile

risposta

6

Se hai intenzione di simulare una tabella con più righe solo con SELECT affermazione, questo in genere può essere fatto con UNION di righe:

SELECT 'myname1' AS 'Name' UNION 
SELECT 'myname2' UNION 
SELECT 'myname3' 
-- etc 

Demo: http://www.sqlfiddle.com/#!3/d41d8/12433

+0

idea geniale non vorrei pensare di farlo in questo modo :) Grazie –

3

in alternativa, è possibile utilizzare i più valori nella SELECT, come:

SELECT [Name] 
FROM (VALUES ('myname1'),('myname2')) AS X([name]) 
1

Nel caso in cui si desidera simulare dati sequenziali come nell'esempio. È possibile definire un CTE ricorsivo e utilizzarlo come una tabella.

Sotto codice genererà 10 record

;With Users as 
(
    Select 1 as ID, CAST('Username1' AS varchar(25)) as Name 
     union all 
    Select ID + 1 , CAST('Username'+CAST(ID+1 AS varchar(5)) AS varchar(25)) 
     from Users 
     where ID < 10 
) 
SELECT * FROM Users 

Ecco SQL Fiddle http://www.sqlfiddle.com/#!3/d41d8/12452

Ma CTE non può essere utilizzato in più statements.If è necessario utilizzarlo in dichiarazioni multiple. Quindi inserire i dati da CTE a Temp Table o Table Variable.

Problemi correlati