Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Генерация чисел в диапазоне в MS SQL  [new]
Goofy122
Member

Откуда:
Сообщений: 253
Здравствуйте

Возможно ли в сгенерировать числа при помощи цикла например While или каким-то другим путем в определенно диапазоне.
Например от 050000000 до 0509999999. 050 неизменная часть то есть начало 050000000 следующий номер будет соотвесно 050000001 до 0509999999 . Помогите пожалуйста кто знает если можно приписать скрипт. Заранее благодарен.
7 май 17, 13:07    [20463721]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел в диапазоне в MS SQL  [new]
Goofy122
Member

Откуда:
Сообщений: 253
короче решил таким путем

declare @count int = 0;
declare @t table ( number int);
declare @n nvarchar(25) = '050';


while @count <= 99
begin
INSERT INTO @t (number)
select @count
set @count = @count + 1;
end

select concat(@n,convert (nvarchar(max) , number)) from @t
7 май 17, 14:17    [20463753]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел в диапазоне в MS SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
WITH Numbers(N) AS(SELECT 50000000 UNION ALL SELECT N+1 FROM Numbers WHERE N<50999999)
SELECT REPLACE(STR(N,9),' ','0') FROM Numbers ORDER BY N OPTION(MAXRECURSION 0);
7 май 17, 14:25    [20463759]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел в диапазоне в MS SQL  [new]
Goofy122
Member

Откуда:
Сообщений: 253
iap
WITH Numbers(N) AS(SELECT 50000000 UNION ALL SELECT N+1 FROM Numbers WHERE N<50999999)
SELECT REPLACE(STR(N,9),' ','0') FROM Numbers ORDER BY N OPTION(MAXRECURSION 0);



спасибо ваш вариант думаю быстрее будет выводить
7 май 17, 14:35    [20463773]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел в диапазоне в MS SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Goofy122
iap
WITH Numbers(N) AS(SELECT 50000000 UNION ALL SELECT N+1 FROM Numbers WHERE N<50999999)
SELECT REPLACE(STR(N,9),' ','0') FROM Numbers ORDER BY N OPTION(MAXRECURSION 0);




спасибо ваш вариант думаю быстрее будет выводить
Ещё быстрее создать у себя постоянную таблицу целых чисел от 0 до, например, миллиона, проиндексировать её и выбирать нужные числа оттуда.
Такая таблица пригодится во многих задачах SQL.

Можно ещё скроссджойнить несколько раз саму с собой достаточно большую таблицу
и пронумеровать записи в SELECTе ROW_NUMBER()ом.

Плюс ещё тысяча способов - в поиск по форуму...
7 май 17, 14:40    [20463777]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел в диапазоне в MS SQL  [new]
Goofy122
Member

Откуда:
Сообщений: 253
iap,

в excell конечно не поместиться такая инфа , а как экспортировать в notepad , проблема system out of memory ?
7 май 17, 15:02    [20463789]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел в диапазоне в MS SQL  [new]
PsyMisha
Member

Откуда: другая столица
Сообщений: 769
Goofy122,

сохраните готовый скрипт в файл, например - c:\#scripts\123.sql
и в командной строки наберите команду ниже, изменив под ваши нужды, соответственно:

cmd.exe /c sqlcmd -S YOUR_SERVER_NAME -E -i c:\#scripts\123.sql >> c:\#scripts\output.log

Сиквельная студия просто впринципе плохо работает с большими файлами/выводом, у не есть ограничение в настройках, можно поменять - но лучше привыкать работать с такими задачами, навроде этой или массовая загрузка - из старой доброй командной строки - никогда не подведет
7 май 17, 23:57    [20464541]     Ответить | Цитировать Сообщить модератору
 Re: Генерация чисел в диапазоне в MS SQL  [new]
andrey odegov
Member

Откуда:
Сообщений: 473
Заведите функцию?
set nocount on;
create function dbo.n(@ bigint,@f bigint)returns table as return
  with
    a as(select 0 c union all select 0),
    b as(select 0 c from a,a t),
    c as(select 0 c from b,b t),
    d as(select 0 c from c,c t),
    e as(select 0 c from d,d t),
    f as(select 0 c from e,e t),
    v as(select top(@f-@+1)0 c from f)
    select row_number()over(order by(select 0))+@-1 n from v
Пруф
8 май 17, 18:21    [20465612]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить