7

如果我可以执行以下选择语句来创建一个具有一个值的表

 SELECT 'myname' AS 'Name' 

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

如何解决此问题以仅从 select 语句返回具有多个值的一列

我不想这样做:

 DECLARE @tmp TABLE (Name varchar(50)) 

 INSERT INTO @tmp (Name) VALUES ('myname1'),('myname2') 
    SELECT * FROM @tmp

如果可能的话,只用一个SELECT语句

4

3 回答 3

10

如果您想仅使用SELECT语句模拟具有多行的表,通常可以使用UNIONof rows 来完成:

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

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

于 2013-04-12T19:48:50.437 回答
9

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

SELECT [Name]
FROM (VALUES ('myname1'),('myname2')) AS X([name])
于 2013-04-12T21:36:28.740 回答
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 插入到临时表或表变量中。

于 2013-04-13T01:46:00.963 回答