使用连续编号填充空表

问题描述:

我有一个已被截断的表(Microsoft SQL 2008)。我现在必须使用顺序号填充它,最多为50,000可记录任意数字(最多不超过7个字符)。使用连续编号填充空表

任何人都可以帮助我写什么SQL语句,将自动填充A000001,A0000002,A0000003等新的空表,以便我可以对表中的记录排序数字。

我有大约50000记录,我需要顺序输入,我真的不想通过手动编辑手动编号列。

在此先感谢。

+0

你能不能只用一个号码,而不是这个字母要排序为多少?零填充来完成你的排序是一种愚蠢的行为,尤其是如果你的点没有填充足够的零点并且不得不返回。 – Kritner 2015-01-15 17:24:48

+0

只要序号为 – khan16 2015-01-15 17:35:25

+0

,数字也没有问题,只要它们按顺序填充任何数字序列即可。 – khan16 2015-01-15 18:51:44

我会使用Excel中使用下列生成您的唯一ID: 在A柱:

=CONCATENATE($C2, TEXT($B2,"000000")) 

在B中柱放1的第一行,并在随后的所有行下面的代码:

=SUM($B4 + 1) 

在C柱:

The letter A 

然后,只需导入Excel CSV作为桌子,你会准备好你所有的ID插入你的空表。

使用Stacked CTE生成序列号

;WITH e1(n) AS 
(
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 
), -- 10 
e2(n) AS (SELECT 1 FROM e1 CROSS JOIN e1 AS b), -- 10*10 
e3(n) AS (SELECT 1 FROM e2 CROSS JOIN e2 AS b), -- 100*100 
e4(n) AS (SELECT 1 FROM e3 CROSS JOIN (SELECT TOP 5 n FROM e1) AS b) -- 5*10000 
    SELECT n = 'A'+right('000000'+ 
    convert(varchar(20),ROW_NUMBER() OVER (ORDER BY n)),7) 
    FROM e4 ORDER BY n; 

检查here更多的方法来生成与性能分析

下面的SQL装载表变量了序列号。只需从中选择并将数据插入新表格。当然不是效率模型,但它会完成工作。

DECLARE @tmp TABLE(
    Value NVARCHAR(10) 
) 

DECLARE @Counter INT=0 
DECLARE @Padding NVARCHAR(20) 
WHILE @Counter<50000 
    BEGIN 
     SET @[email protected]+1 

     SET @Padding= 
      CASE LEN(CONVERT(NVARCHAR,@Counter)) 
       WHEN 1 THEN '00000' 
       WHEN 2 THEN '0000' 
       WHEN 3 THEN '000' 
       WHEN 4 THEN '00' 
       WHEN 5 THEN '0' 
       ELSE '' 
      END 

     INSERT INTO @tmp SELECT 'A' + @Padding + CONVERT(NVARCHAR,@Counter) 
    END 

select * from @tmp 
+0

如果我只想填充列而不是表 – khan16 2015-01-15 18:36:40

+0

@ khan16请注意一个具体的例子。您可以将标识列添加到表变量,在表上执行ROWNUMBER以更新并将这些集合加入到更新中。 – UnhandledExcepSean 2015-01-15 20:17:44

使用带有标识列的表并填充它。然后更新该表来设定你需要如下的阿尔法值:

create table MyTable (
    ID int not null identity(1,1), 
    Alpha varchar(30) 
) 

truncate table MyTable 

begin tran -- makes it run much faster 

declare @i int 

select @i = 1 

while @i < 1000000 

begin 

    insert into MyTable (Alpha) values ('') 

    select @i = @i + 1 

end 

commit 

update MyTable set Alpha = 'A' + replicate('0', 6 - len(cast(ID as varchar(30)))) + cast(ID as varchar(30))