如果我可以执行以下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插入到临时表或表变量。