只使用SELECT语句模拟一个包含多行的表



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

 SELECT 'myname' AS 'Name' 

这将返回一个列= Name和一个值= myname的表

我如何解决这个问题,从select语句返回一个具有多个值的列

我不想这样做:

 DECLARE @tmp TABLE (Name varchar(50)) 
 INSERT INTO @tmp (Name) VALUES ('myname1'),('myname2') 
    SELECT * FROM @tmp

如果可能的话,只从单个SELECT语句中取出

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

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

如果你想用SELECT语句模拟一个有多行的表,这通常可以用UNION的行来完成:

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

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

如果您希望像示例中那样模拟顺序数据。您可以定义递归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提琴http://www.sqlfiddle.com/#!3/d41d8/12452

但是CTE不能用于多个语句。如果你需要在多个语句中使用它。然后将数据从CTE插入到临时表或表变量。

相关内容

最新更新