2014-09-25 5 views
0

Я хочу создать кучу данных с таблицей Tally в SQL (sql2008) и определенно нуждаться в помощи.Таблица Tally в SQL

Прежде всего, у меня есть эта таблица, которая содержит 2 столбца.

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

Пока я не забочусь данные в столбце DataInfo, я хочу добавить о 10k из строки в таблицу с уникальным AcctNum на каждой строке.

Проблема, хотя мне нужно сохранить длину данных в обоих столбцах. Например, столбец AcctNum выглядит как «400000000000001». как я увеличиваю число, сохраняя «пустое пространство»?

Не уверен, что здесь у меня есть смысл, но, пожалуйста, дайте мне знать, и я попытаюсь объяснить больше, спасибо!

+0

Правильно ли я думаю, что вы хотите, чтобы диапазон AcctNum находился между 400000000000001 и 400000000010001? – jpw

+0

Спасибо за быстрый ответ !!! Да, все, что я хочу, каждый AcctNum будет уникальным. Так что это тоже сработает! – Kyle

+0

А что вам нужно? Процедура для вставки всех этих строк? [Вы пробовали что-нибудь?] (Http://whathaveyoutried.com) – Barranka

ответ

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, он работает! И если вы не возражаете, чтобы еще 1 минута (для моих образовательных целей), какой синтаксис это «с»? – Kyle

+0

@ C.T. Точка с запятой должна заканчивать предыдущую партию операторов (если таковая имеется). Из документации: _Когда CTE используется в заявлении, являющемся частью пакета, перед ним должно следовать точка с запятой. Таким образом, это действительно относится к концу того, что было до этого, просто добавить его в начало быть уверенным, что оно есть :) – jpw

+1

ahh, определенно узнал что-то сегодня. Благодаря тонну!!! – Kyle

Смежные вопросы