2014-09-25 45 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