2013-04-12 12 views
6

Jeśli mogę zrobić następujące SELECT, aby utworzyć tabelę z jedną wartościąSymulacja tabeli z wielu wierszy tylko z SELECT

SELECT 'myname' AS 'Name' 

ten powróci tabelę z kolumną = nazwa i jedną wartość = MyName

jak mogę obejść ten problem, aby powrócić jedną kolumnę z wielu wartości jedynie z select

nie chcę, aby to zrobić:

DECLARE @tmp TABLE (Name varchar(50)) 

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

Wystarczy z jednego SELECT oświadczenia jeśli to możliwe

Odpowiedz

6

Jeśli chce symulować tabeli z wielu wierszy tylko z SELECT oświadczenia, może to być wykonane zazwyczaj z UNION rzędów:

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

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

+0

genialny pomysł, nie pomyślałbym o zrobieniu tego w ten sposób :) Dzięki –

3

Ewentualnie można skorzystać z wielu wartości w SELECT, jak:

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

Jeśli chcesz symulować sekwencyjne dane, takie jak w twoim przykładzie. Możesz zdefiniować rekursywną CTE i użyć jej jako tabeli.

poniższy kod wygeneruje 10 rekordów

;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 

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

Ale CTE nie mogą być używane w wielu statements.If trzeba używać go w wielu wypowiedzi. Następnie wstaw dane z CTE do tabeli temp. Lub tabeli zmiennych.

Powiązane problemy