2015-11-29 2 views
0

Мне нужно обновить 12 000 записей в таблице, чтобы привести их в порядок с помощью «AAA», , 'AAB', 'AAC' ..... 'ZZZ'. Это должно быть 3 символа.Как перечислить «AAA», «AAB», «AAC» ....... «ZZZ» с запросом SQL Server

таблица выглядит следующим образом:

table_items

id - int (Identity) 
name - nvarchar(50) 
picking_order - nvarchar(3) 

мне нужно обновить picking_order с 3-х символов. Как я могу закодировать этот скрипт в SQL Server?

+0

Вы должны обновить существующие записи или вставлять новые записи? – zedfoxus

+0

Мне нужно обновить существующие записи –

+1

Просто, может, ваша таблица увеличит количество реестров? Потому что с этой комбинацией вы можете иметь только 17576 перестановок, если мои вычисления верны. –

ответ

3

Вы можете использовать ASCII() функции и некоторые арифметические:

with toupdate as (
     select t.*, row_number() over (order by id) - 1 as seqnum 
     from t 
    ) 
update toupdate 
    set picking_order = (ascii(char('A') + seqnum/(26*26)) + 
         ascii(char('A') + (seqnum/26) % 26) + 
         ascii(char('A') + seqnum % 26) 
         ); 
0

Вот что вы можете сделать - долгий путь (Гордон получил действительно крутой способ сделать то, что вы хотите)

  • создать хранимая процедура
  • установить переменную 0
  • использовать while loop от 65 до 90
  • внутри этого создайте еще один цикл в то время как идет от 65 до 90
  • внутри этого создайте еще один цикл в то время как идет от 65 до 90
  • выбрать верхний 1 идентификатор в переменный из таблицы, где идентификатор> таблицы переменных
  • обновления set field = char (loop-1-number) + char (loop-2-number) + char (loop-3-number), где id = variable. См http://sqlfiddle.com/#!3/9eecb7d/536

После того, как ваши петли сделаны, ваша запись будет обновляться

+0

While Loops ?! в SQL !? WHYYYYYY NOOOOOO –

+0

Что случилось с пока? – zedfoxus

+0

SQL основан на теории множеств, а не на функциональном программировании. Использование цикла while подобно ходьбе на велосипеде. –

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