Sql 仅使用SELECT语句模拟具有多行的表
如果我可以执行以下select语句来创建一个具有一个值的表Sql 仅使用SELECT语句模拟具有多行的表,sql,tsql,sql-server-2008-r2,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 '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语句如果您希望仅使用SELECT语句模拟具有多行的表,这通常可以通过行并集来完成:
演示:或者,您可以使用SELECT中的多个值,如:
SELECT [Name]
FROM (VALUES ('myname1'),('myname2')) AS X([name])
如果您想模拟示例中的顺序数据,您可以定义一个递归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小提琴
但是CTE不能在多个语句中使用。如果您需要在多个语句中使用它。然后将数据从CTE插入临时表或表变量。好主意,我不想这样做:感谢使用联合不是最好的方法。这不应该是公认的答案。这是最好的方法,应该是公认的答案。我不知道您可以直接在FROM子句中提供值;那很优雅。
;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