如果我可以执行以下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
语句
答案 0 :(得分:8)
如果您想要使用SELECT
语句模拟包含多行的表,通常可以使用UNION
行来完成此操作:
SELECT 'myname1' AS 'Name' UNION
SELECT 'myname2' UNION
SELECT 'myname3'
-- etc
答案 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。