使用SELECT语句模拟具有多行的表

时间:2013-04-12 19:43:40

标签: sql tsql sql-server-2008-r2

如果我可以执行以下select语句来创建一个具有一个值的表

 SELECT 'myname' AS 'Name' 

这将返回一个包含column = Name和一个value = myname

的表

如何解决这个问题,只从select语句中返回一个包含多个值的列

我不想这样做:

 DECLARE @tmp TABLE (Name varchar(50)) 

 INSERT INTO @tmp (Name) VALUES ('myname1'),('myname2') 
    SELECT * FROM @tmp
如果可能,

只需来自单个SELECT语句

3 个答案:

答案 0 :(得分:8)

如果您想要使用SELECT语句模拟包含多行的表,通常可以使用UNION行来完成此操作:

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

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

答案 1 :(得分:6)

或者,您可以在SELECT中使用多个VALUES,例如:

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

答案 2 :(得分:1)

如果你想模拟像你的例子中的顺序数据。你可以定义递归CTE并像表格一样使用它。

下面的代码将生成10条记录

;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

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

但CTE不能用于多个语句。如果需要在多语句中使用它。然后将CTE中的数据插入Temp Table或Table Variable。