有没有办法编写一个动态的sql select语句(不查询表/列),它将返回类似这样的内容
id
1
2
3
4
5
...
etc.
我需要编写几个通用查询来拉取值1到X
(X将由先前的不同查询预先确定)。
假设X为5,数据将返回5行1 2 3 4 5
如果X为27,则数据将返回1 2 3 ... 27,依此类推。
关于其他评论,这是在第三方sybase软件中使用的,我仅限于它似乎创建的查询的复杂性,并且删除表似乎不起作用
答案 0 :(得分:0)
你可以试试像这样的递归CTE
declare @mx integer=4
;with test as (
select 1 as id
union all
select id+1
from test
where id<@mx
)
select * from test
答案 1 :(得分:0)
27选择:
DECLARE @Count int = 1
DECLARE @MaxCount int = 27 -- Whatever your incoming max is
WHILE @Count <= @MaxCount
BEGIN
SELECT @Count
SELECT @Count = @Count + 1
END
一个选择:
CREATE TABLE #TEMPNUMS (AUTONUM INT IDENTITY (1,1), GHOSTVAL VARCHAR(1))
DECLARE @Count int = 1
DECLARE @MaxCount int = 27 -- Whatever your incoming max is
WHILE @Count <= @MaxCount
BEGIN
INSERT INTO #TEMPNUMS (GHOSTVAL)
SELECT ''
SELECT @Count = @Count + 1
END
SELECT AUTONUM FROM #TEMPNUMS
DROP TABLE #TEMPNUMS
答案 2 :(得分:0)
假设您的最大数量不会超过9999.如果是,那么您需要重新构建查询以添加另一个图层。
DECLARE @MaxCount int = 27 -- Whatever your incoming max is
SELECT ones.n + 10*tens.n + 100*hundreds.n + 1000*thousands.n
FROM (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) ones(n),
(VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) tens(n),
(VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) hundreds(n),
(VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) thousands(n)
where ones.n + 10*tens.n + 100*hundreds.n + 1000*thousands.n between 1 and @MaxCount
ORDER BY 1
在另一个类似问题上查看此答案:How to generate a range of numbers between two numbers?