用连续数字填充空表

时间:2015-01-15 17:16:49

标签: sql sql-server-2008

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

任何人都可以帮助我编写哪些SQL语句,它会自动使用A000001A0000002A0000003等填充新空表,以便我可以对数字进行排序表中的记录。

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

提前致谢。

4 个答案:

答案 0 :(得分:0)

我使用excel使用以下内容生成您的唯一ID: 在A栏中:

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

在B列中,在第一行中放置1,在后续所有行中放入以下代码:

=SUM($B4 + 1)

在C栏中:

The letter A

然后只需将excel csv作为表导入,您就可以准备好将所有ID插入到空表中。

答案 1 :(得分:0)

使用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 以了解更多通过效果分析生成序号的方法

答案 2 :(得分:0)

下面的SQL加载一个表变量。只需从中选择并将数据插入新表即可。当然不是效率的典范,但它可以完成工作。

DECLARE @tmp TABLE(
    Value NVARCHAR(10)
)

DECLARE @Counter INT=0
DECLARE @Padding NVARCHAR(20)
WHILE @Counter<50000
    BEGIN
        SET @Counter=@Counter+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

答案 3 :(得分:0)

使用带有标识列的表并填充它。然后更新该表以设置所需的alpha值,如下所示:

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))