我只想生成一个像这样的列表
XY0001
XY0002
XY0003
所有行的前缀都相同。需要固定长度(本例中为6)
寻找一种简单的方法来生成这样的列表,将其放入临时表中。
MS SQL
这个数字非常小:
DECLARE @TempList TABLE (Name VARCHAR(100));
insert into @TempList Values ('XY00001')
insert into @TempList Values ('XY00002')
insert into @TempList Values ('XY00003')
insert into @TempList Values ('XY00004')
select * from @TempList
答案 0 :(得分:0)
您可以使用ad-hoc计数表
如果2012 +
DECLARE @TempList TABLE (Name VARCHAR(100));
Select Name = 'XY'+format(N,'0000')
From (Select Top 9999 N=Row_Number() Over (Order By (Select NULL)) From master..spt_values N1,master..spt_values N2) A
Order by N
<强>返回强>
Name
XY0001
XY0002
XY0003
XY0004
...
XY9997
XY9998
XY9999
如果不是
DECLARE @TempList TABLE (Name VARCHAR(100));
Select Name = 'XY'+right('00000'+cast(N as varchar(25)),4)
From (Select Top 9999 N=Row_Number() Over (Order By (Select NULL)) From master..spt_values N1,master..spt_values N2) A
Order by N
答案 1 :(得分:0)
我喜欢使用递归CTE。
declare @max_number int = 1000;
with num as (
select 1 as n
union
select n + 1
from num
where n < @max_number
)
select 'XY' + (cast n as char(4))
from num;
递归CTE为您提供数字,而施法者使用0进行左侧填充以确保您获得0001而不是1。
这种方法将支持可变数量的输出。虽然正如你在问题中提到的那样,如果你只想要一些,那就太过分了。
(你需要对边界情况进行测试。我没有测试过这个确切的代码示例。)
由于它使用递归,因此缩放的程度可能有限。