2014-09-25 74 views
0

我想用SQL中的Tally表创建一堆数据(sql2008),并且绝对需要帮助。Tally Table in SQL

首先,我有这张包含2列的表格。

{ 
    AcctNum (nchar(30), null), 
    DataInfo (nchar(745), null) 
} 

虽然我不在乎在DataInfo列中的数据,我想排的大约10K添加到表上的每一行唯一ACCTNUM。

虽然问题是我需要保持两列数据的长度。例如,AcctNum列看起来像“400000000000001”。如何在保留“空白区”的同时增加数字?

不知道我在这里有多大意义,但请让我知道,我会尽力解释更多,谢谢!

+0

我是否正确,如果我想你想AcctNum的范围在400000000000001和400000000010001之间? – jpw 2014-09-25 20:59:04

+0

感谢您的快速响应!是的,我只想要每个AcctNum都是唯一的。所以这也会起作用! – Kyle 2014-09-25 21:00:36

+0

你想要什么?一个插入所有这些行的过程? [你有没有试过?](http://whathaveyoutried.com) – Barranka 2014-09-25 21:06:18

回答

2

使用递归公用表表达式:

-- set up a table variable for demo purpose 

declare @t table (AcctNum nchar(30) null, DataInfo nchar(745) null); 
-- insert the starting value 
insert @t values ('400000000000001', null); 

-- run the cte to generate the sequence 
with cte (acctnum, num) as (
    select acctnum, cast(acctnum as bigint) + 1 num -- starting value 
    from @t 
    union all 
    select acctnum, num+1 from cte 
    where num < cast(acctnum as bigint) + 10000  -- stopping value 
    ) 

-- insert data sequence into the table 
insert @t (AcctNum, DataInfo) 
select num, null from cte 
option (maxrecursion 10000); 

select * from @t; 

表可变@t现在将包含ACCTNUM 400000000000001 - > 400000000010001作为连续序列。

+0

谢谢jpw,它的工作原理!如果你不介意让你再犯一分钟(为了我自己的教育目的),那么这个“with”是什么样的语法? – Kyle 2014-09-25 21:21:25

+0

@ C.T。分号用于终止前一批语句(如果有的话)。从文档:当一个CTE被用在一个批处理语句中时,它前面的语句必须跟一个分号。所以它真的属于以前的任何一个末尾,通常将它添加到一开始要确定它在那里:) – jpw 2014-09-25 21:23:44

+1

啊,今天肯定学到了一些东西。万分感谢!!! – Kyle 2014-09-25 21:28:51