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

Откуда:
Сообщений: 8
Всем здравствуйте
Столкнулся с проблемой, нужно заполнить таблицу 10000 записями и произвести при этом нумерацию всех товаров в наименовании самого товара, например "Товар 00001", "Товар 00002" и т.д.
Просто заполнить таблицу 10000 записями с пронумерованными строками я могу, но как засунуть нумерацию ещё и в наименование товаров да и ещё с лидирующими нулями?
Строго не судите, опыта мало
CREATE TABLE tovari
    (
    id INT NOT NULL PRIMARY KEY,
    name CHAR(11) NOT NULL,
    price NVARCHAR(50) NOT NULL,
    )

	DECLARE 
    @idrow INT = 1,
    @text CHAR(11),
    @i INT,
	@conv int
    
WHILE @idrow <= 10000
BEGIN   
	SET @text  = 'tovar '
	SET @i = 0
	SET @conv = 0
	WHILE @i < @idrow
	BEGIN 
	        SELECT CONVERT(char(5), @conv)
		SET @text = @text + @conv
		SET @i = @i + 1
	END
    INSERT INTO tovari VALUES
        (
        @idrow
        ,@text
        ,@i
        )
    SET @idrow = @idrow + 1
END
16 окт 17, 14:19    [20872924]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
centuriomark
Member

Откуда:
Сообщений: 8
Попытался через конвертацию из int в char
16 окт 17, 14:21    [20872937]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
Konst_One
Member

Откуда:
Сообщений: 11519
select FORMAT(15, '00000')
16 окт 17, 14:29    [20872973]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
aleks222
Guest
    INSERT INTO tovari 
       select top(10000) id = row_number() over(order by 1/0)
                               , name =  'tovar ' + rigth( '00000' + cast( row_number() over(order by 1/0) as varchar(16) ) ,  5 )
                               , price = 123
          from [любая здоровенная таблица]
16 окт 17, 14:36    [20873003]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
iap
Member

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

ай-яй-яй! После tovari надо бы поля в круглых скобках перечислить.
16 окт 17, 15:41    [20873301]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
centuriomark
Member

Откуда:
Сообщений: 8
aleks222
    INSERT INTO tovari 
       select top(10000) id = row_number() over(order by 1/0)
                               , name =  'tovar ' + rigth( '00000' + cast( row_number() over(order by 1/0) as varchar(16) ) ,  5 )
                               , price = 123
          from [любая здоровенная таблица]

забыл упомянуть, что данные нужно сгенерировать, а тут как я понял берутся из другой таблицы
16 окт 17, 16:13    [20873480]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
centuriomark
aleks222
    INSERT INTO tovari 
       select top(10000) id = row_number() over(order by 1/0)
                               , name =  'tovar ' + rigth( '00000' + cast( row_number() over(order by 1/0) as varchar(16) ) ,  5 )
                               , price = 123
          from [любая здоровенная таблица]

забыл упомянуть, что данные нужно сгенерировать, а тут как я понял берутся из другой таблицы
Что именно берётся из другой таблицы?
Покажите пальцем, пожалуйста.
16 окт 17, 16:40    [20873585]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
centuriomark
Member

Откуда:
Сообщений: 8
Konst_One
select FORMAT(15, '00000')

а конкретней можно пожалуйста
16 окт 17, 16:43    [20873593]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
Konst_One
Member

Откуда:
Сообщений: 11519
ну как же, ТС же про это: [любая здоровенная таблица]

16 окт 17, 16:43    [20873597]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
Konst_One
Member

Откуда:
Сообщений: 11519
centuriomark
Konst_One
select FORMAT(15, '00000')


а конкретней можно пожалуйста


что тут не понятно? есть такая функция для форматирования значений, я вам пример привёл для вашего случая. другой вариант уже готовый вам выше дали через right
16 окт 17, 16:44    [20873606]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
Konst_One
Member

Откуда:
Сообщений: 11519
select top(10000) 
	id = row_number() over(order by 1/0)
	, name =  N'Товар ' + FORMAT(row_number() over(order by 1/0), '00000')
	, price = 100.99
FROM [sys].[all_columns] as [любая здоровенная таблица]
16 окт 17, 16:52    [20873657]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
centuriomark
Member

Откуда:
Сообщений: 8
iap
centuriomark
пропущено...

забыл упомянуть, что данные нужно сгенерировать, а тут как я понял берутся из другой таблицы
Что именно берётся из другой таблицы?
Покажите пальцем, пожалуйста.

значит неправильно вас понял)
INSERT INTO tovari (id,name,price)
select top(10000) id = row_number() over(order by 1/0)
, name = 'tovar ' + rigth( '00000' + cast( row_number() over(order by 1/0) as varchar(16) ) , 5 )
, price = 123
from tovari
так нужно, если я всё правильно понял?
16 окт 17, 16:55    [20873666]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
Konst_One
Member

Откуда:
Сообщений: 11519
нет, выполните запрос, что выше запостил. если результат вас устраивает, то его подставьте в insert
16 окт 17, 16:56    [20873675]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7768
centuriomark
как засунуть нумерацию ещё и в наименование товаров да и ещё с лидирующими нулями


Никак не надо этого делать. Храните названия отдельно, а номера отдельно. Потом не будет эффективно искать ни по номеру, ни по названию. Строку потом получите запросом, как выше писали.
16 окт 17, 16:56    [20873676]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
centuriomark
Member

Откуда:
Сообщений: 8
Владислав Колосов, я тоже думал зачем делать вместе, но дали задание именно так сгенерировать имена чтобы и номер отдельно был и наименование товара с номером
16 окт 17, 17:00    [20873691]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
centuriomark
Member

Откуда:
Сообщений: 8
Konst_One
нет, выполните запрос, что выше запостил. если результат вас устраивает, то его подставьте в insert

то что нужно, большое спасибо. а можно такую же штуку провернуть с алфавитом(от А до Я)?
16 окт 17, 17:30    [20873778]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
Konst_One
Member

Откуда:
Сообщений: 11519
создайте табличку с алфавитом
16 окт 17, 17:31    [20873780]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
Konst_One
Member

Откуда:
Сообщений: 11519
можно и временную
16 окт 17, 17:32    [20873781]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
centuriomark
Member

Откуда:
Сообщений: 8
Konst_One
создайте табличку с алфавитом

то есть в таблице нужно перечислить все буквы? просто для 33 записей без проблем подойдёт:
INSERT INTO skladi (id,name) 
values (1, 'Склад А'),
          ...................
          (33, 'Склад Я')

я подумал, что может через встроенное можно сделать, ascii кода там
16 окт 17, 17:46    [20873795]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в строке  [new]
Konst_One
Member

Откуда:
Сообщений: 11519
думайте сами как вам лучше это сделать

select ASCII('А') As [А], ASCII('Я') As [Я]
16 окт 17, 17:48    [20873800]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить