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

Откуда:
Сообщений: 137
Тобиш указываю 1 и 10 и колонко автоматом заполняется на
1
2
3
4
5
6
7
8
9
10
28 фев 18, 12:46    [21224517]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
kolyady,

а если строк 1000?
28 фев 18, 12:47    [21224520]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
kolyady
Member

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

да хоть милион , к чему вопрос?
28 фев 18, 12:56    [21224550]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
kolyady,

в 11 строке что будет?
28 фев 18, 12:57    [21224558]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
kolyady
Member

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

не понял вопроса?
диапазон с 1 по 10 (на примере) логично что 11 не будет
28 фев 18, 13:00    [21224567]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
kolyady
TaPaK,

не понял вопроса?
диапазон с 1 по 10 (на примере) логично что 11 не будет

как же это утомляет

уходи
DECLARE @s INT = 1,
	@f INT = 10

SELECT (ROW_NUMBER() OVER(ORDER BY 1/0) - 1) % (@f-@s +1 ) + 1 + (@s - 1)
FROM sys.objects
28 фев 18, 13:03    [21224578]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
kolyady
Member

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

вместо 10 залило 4000 строк повторяя с 1 по 10
28 фев 18, 13:34    [21224702]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
kolyady
TaPaK,

вместо 10 залило 4000 строк повторяя с 1 по 10

хорошо что таких много :)
28 фев 18, 13:39    [21224723]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
kolyady,

https://www.google.ru/search?q=ben-gan getnums
28 фев 18, 13:55    [21224799]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
Невский
Member

Откуда:
Сообщений: 30
kolyady
TaPaK,

вместо 10 залило 4000 строк повторяя с 1 по 10


Так он ведь и спрашивал, сколько строк нужно :-) Я тоже понял, что количество строк не важно, главное что бы числа шли от 1 до 10 в цикле. Если нужно было только 10 строк, то добавь в селект top 10 например :-) А если нужен обычный счетчик в таблице, то можно в поле объявить IDENTITY(1,1).
28 фев 18, 13:56    [21224807]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
kolyady
Member

Откуда:
Сообщений: 137
Невский,

допустим есть :
стартовое число = 1002345
конечное число = 2006589

мне нужно заполнить таблице всеми числами которые между ними, включая их.
Мне не нужно:
-чтобы они повторялись
чтобы было больше или меньше указаного диапазона
2006589-1002345= 1004244 - количество строк в итоге
28 фев 18, 14:02    [21224846]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
вам уже всё подсказали, выбирете готовое решение
28 фев 18, 14:04    [21224853]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
*выберите
28 фев 18, 14:04    [21224855]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
kolyady,

21224799 что ещё
28 фев 18, 14:04    [21224857]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
Невский
Member

Откуда:
Сообщений: 30
kolyady
Невский,

допустим есть :
стартовое число = 1002345
конечное число = 2006589

мне нужно заполнить таблице всеми числами которые между ними, включая их.
Мне не нужно:
-чтобы они повторялись
чтобы было больше или меньше указаного диапазона
2006589-1002345= 1004244 - количество строк в итоге


WITH
TENS      (N) AS (SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL
                  SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0),
THOUSANDS (N) AS (SELECT 1 FROM TENS t1 CROSS JOIN TENS t2 CROSS JOIN TENS t3),
MILLIONS  (N) AS (SELECT 1 FROM THOUSANDS t1 CROSS JOIN THOUSANDS t2),
TenMillion(N) AS (SELECT 1 FROM MILLIONS CROSS JOIN TENS),
TALLY     (N) AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) FROM TenMillion)
SELECT TOP (2006589-1002345) (1002344) + N FROM TALLY;
28 фев 18, 15:32    [21225294]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
kolyady
Member

Откуда:
Сообщений: 137
Невский,

вот все не то, я понимаю что можно и так как в примерах, я просто когда то видел решение буквально в виде 2 строчек кода, оно и работало мгновенно и мега простое. Функция подойдет опять же для небольшого диапазона, на 10 млн она загибается.

Понимаю что чего то хочу но непонятно чего, просто надеялся что кто то скинет эти 2 строчки ну или на подобии :(
28 фев 18, 17:11    [21225696]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
страдалец,
создай таблицу чисел и выбери по диапозону обычным селектом
28 фев 18, 17:14    [21225708]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
kolyady,

статическая таблица чисел, один раз создал и пользуйся везде... быстрее ничего не будет
простой но не самый быстрый способ создания
CREATE TABLE dbo.Numbers (N INT)
GO
INSERT INTO dbo.Numbers DEFAULT VALUES 
GO 10000000
28 фев 18, 17:18    [21225718]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
Невский
Member

Откуда:
Сообщений: 30
kolyady
Невский,

вот все не то, я понимаю что можно и так как в примерах, я просто когда то видел решение буквально в виде 2 строчек кода, оно и работало мгновенно и мега простое. Функция подойдет опять же для небольшого диапазона, на 10 млн она загибается.

Понимаю что чего то хочу но непонятно чего, просто надеялся что кто то скинет эти 2 строчки ну или на подобии :(


Ну у меня на обычном серваке для отчетности твой диапазон отработал за секунду. 10 млн в таблицу вставились за 11 сек. Тебя смущает большой синтаксис? Сохрани скрипт как функцию и вызывай ее всего одной строчкой :-)
28 фев 18, 17:41    [21225830]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
bideveloper
Member

Откуда:
Сообщений: 484
TaPaK
kolyady
CREATE TABLE dbo.Numbers (N INT)
GO
INSERT INTO dbo.Numbers DEFAULT VALUES 
GO 10000000


Только, наверно

CREATE TABLE dbo.Numbers (N INT IDENTITY)
28 фев 18, 17:58    [21225927]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
kolyady
Member

Откуда:
Сообщений: 137
итог:

по быстродействии ничего лучшего не нашел :

IF OBJECT_ID(N'dbo.GetNums', N'IF') IS NOT NULL DROP FUNCTION dbo.GetNums;
GO
CREATE FUNCTION dbo.GetNums(@low AS BIGINT, @high AS BIGINT) RETURNS TABLE
AS
RETURN
WITH
L0 AS (SELECT c FROM (SELECT 1 UNION ALL SELECT 1) AS D(c)),
L1 AS (SELECT 1 AS c FROM L0 AS A CROSS JOIN L0 AS B),
L2 AS (SELECT 1 AS c FROM L1 AS A CROSS JOIN L1 AS B),
L3 AS (SELECT 1 AS c FROM L2 AS A CROSS JOIN L2 AS B),
L4 AS (SELECT 1 AS c FROM L3 AS A CROSS JOIN L3 AS B),
L5 AS (SELECT 1 AS c FROM L4 AS A CROSS JOIN L4 AS B),
Nums AS (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS rownum
FROM L5)
SELECT TOP(@high - @low + 1) @low + rownum - 1 AS n
FROM Nums
ORDER BY rownum;
GO

Можно закрывать тему
28 фев 18, 18:02    [21225951]     Ответить | Цитировать Сообщить модератору
 Re: как заполнить автоматически колонку указав стартовое число и конечное  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
kolyady, собственно эта функция и была написана, как результат исследований - какой способ быстрее. Правда на этом форуме пару лет назад было обсуждение, и там нашли способы, которые при определенных условиях таки дают боле быстрый результат, но это не точно.
Если уж совсем интересно - можете поискать по названию функции на форуме, только долго искать именно то обсуждение.
28 фев 18, 18:12    [21225983]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить