0
Select 0 AS A, 1 AS B FROM someTable

基于上述查询,我​​可以硬编码列数和数据,而不管 someTable 中的数据是什么,而行数取决于 someTable 中的行数。我想知道如果我也想硬编码行数该怎么办?

例如,如果 someTable 只有 10 行,我应该如何修改上面的查询,以便我可以有 1000 行记录?

4

1 回答 1

1

您可以继续交叉加入您的表格:

SELECT  TOP 1000 0 AS A, 1 AS B 
FROM    someTable a
        CROSS JOIN someTable b
        CROSS JOIN someTable c
        CROSS JOIN someTable d;

我假设您已使用 SSMS 标记这是 SQL Server,否则您可能需要使用 LIMIT

SELECT  0 AS A, 1 AS B 
FROM    someTable a
        CROSS JOIN someTable b
        CROSS JOIN someTable c
        CROSS JOIN someTable d
LIMIT 1000;

这里的问题是,如果SomeTable只有 1 行,不管你交叉加入多少次,你仍然只有一行。如果您实际上并不关心表中的值,而只想使用它来生成行,那么您可以只使用您知道行数超过您需要的系统视图(再次假设 SQL Server):

SELECT  TOP 1000 0 AS A, 1 AS B
FROM    sys.all_objects a;

即使在一个空数据库上sys.all_objects也会有 2083 行。如果您可能需要更多,那么只是CROSS JOIN视图:

SELECT  TOP 1000 0 AS A, 1 AS B
FROM    sys.all_objects a
        CROSS JOIN sys.all_objects b;

这将为您提供 4,338,889 行。

于 2014-04-07T11:14:41.383 回答