Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 仅使用SELECT语句模拟具有多行的表_Sql_Tsql_Sql Server 2008 R2 - Fatal编程技术网

Sql 仅使用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语句来创建一个具有一个值的表

 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