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

Откуда:
Сообщений: 2
Добрый день!
Начинаю изучать SQL, поэтому прошу сильно не бить руками и ногами. Поискал по форуму не нашёл похожей проблемы.

Ситуация такая: SQL Server2000. В таблице БД есть столбец CODE (CHAR(12),NotNull) туда заносится значение по типу
N-0000006104, в один "прекрасный" момент случился сбой и произошло следующее: N-006105.
Сейчас уже N-800000. Необходимо поменять все значения с N-006105 до N-800000 на, соответственно, N-0000006105 до N-0000800000.

Я выбрал Select'ом все некорректные значения, теперь ломаю голову над циклом и каким оператором воспользоваться UPDATE или REPLACE(али ещё как можно обойти этот момент).

Буду очень признателен за оказанную помощь.
12 окт 11, 15:15    [11427412]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
fanikman
теперь ломаю голову над циклом и каким оператором воспользоваться UPDATE или REPLACE(али ещё как можно обойти этот момент).
UPDATE без цикла
12 окт 11, 15:23    [11427478]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
fanikman, если нашли условие для выбора некорректных значений, то остается просто
UPDATE + STUFF
никаких циклов не надо
12 окт 11, 15:23    [11427481]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
trew
Member

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

DECLARE @str VARCHAR(10)
DECLARE @ii int
SET @ii=6105
SET @str ='N-000000'

UPDATE Таблица
SET Code ='N-000000' +CONVERT(varchar(10),@ii), @ii=@ii+1
WHERE условие
12 окт 11, 15:23    [11427486]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
iljy
Member

Откуда:
Сообщений: 8711
fanikman
Добрый день!
Начинаю изучать SQL, поэтому прошу сильно не бить руками и ногами. Поискал по форуму не нашёл похожей проблемы.

Ситуация такая: SQL Server2000. В таблице БД есть столбец CODE (CHAR(12),NotNull) туда заносится значение по типу
N-0000006104, в один "прекрасный" момент случился сбой и произошло следующее: N-006105.
Сейчас уже N-800000. Необходимо поменять все значения с N-006105 до N-800000 на, соответственно, N-0000006105 до N-0000800000.

Я выбрал Select'ом все некорректные значения, теперь ломаю голову над циклом и каким оператором воспользоваться UPDATE или REPLACE(али ещё как можно обойти этот момент).

Буду очень признателен за оказанную помощь.

В упор не понял, о каком вы цикле, строки выбираются SELECT, изменяются UPDATE, а изменить строку можно примерно так:
declare @s char(12)
set @s = 'N-006105'
set @s = stuff(@s, 3, 0,'0000')
select @s
PS Изучать скуль на примере SQL2000 - не очень хорошая идея, скоро уже будет 2011.
12 окт 11, 15:27    [11427517]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
iljy
Member

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

опять плохому учите? Порядок выполнения UPDATE неопределен.
12 окт 11, 15:28    [11427534]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
trew
Member

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

Да, ещё не тот уровень) набираюсь опыта.

Так будет правильнее: к числу прибавили 1 и взяли справа 10 знаков.
SET Code ='N-' +RIGHT('0000000000' + CONVERT(varchar(10),@ii),10), @ii=@ii+1
12 окт 11, 15:30    [11427553]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
trew
Member

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

Порядок выполнения UPDATE неопределен.

если бы был столбец ID, я бы к нему привязался.
А так что, сортировать и нумеровать весь список?
12 окт 11, 15:33    [11427586]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
fanikman
Member

Откуда:
Сообщений: 2
Очень благодарен.Сейчас буду править =)
Возможно и не очень хорошая идея, просто досталась мне БД такая. Необходимо срочно исправить, а то скоро N-999999. Напугали тут меня, что это будет последняя запись.
12 окт 11, 15:33    [11427590]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
trew
iljy,

Да, ещё не тот уровень) набираюсь опыта.

Так будет правильнее: к числу прибавили 1 и взяли справа 10 знаков.
SET Code ='N-' +RIGHT('0000000000' + CONVERT(varchar(10),@ii),10), @ii=@ii+1
Что же у вас за код такой, что он делает???

UPDATE Таблица
SET Code = STUFF(Code, 3, 0, '000000')
WHERE Code like 'N-%'
    and len(Code) = 8
12 окт 11, 15:37    [11427645]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
iljy
Member

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

вообще судя по словам TC достаточно условия типа
between 'N-006105' and 'N-800000'
, можно подстраховаться и сделать
between 'N-000000' and 'N-999999'
, индекс использоваться будет лучше.
12 окт 11, 15:44    [11427745]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
iljy
alexeyvg,

вообще судя по словам TC достаточно условия типа
between 'N-006105' and 'N-800000'
, можно подстраховаться и сделать
between 'N-000000' and 'N-999999'
, индекс использоваться будет лучше.
Да, так правильнее...
12 окт 11, 15:48    [11427802]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
alexeyvg
trew
iljy,

Да, ещё не тот уровень) набираюсь опыта.

Так будет правильнее: к числу прибавили 1 и взяли справа 10 знаков.
SET Code ='N-' +RIGHT('0000000000' + CONVERT(varchar(10),@ii),10), @ii=@ii+1
Что же у вас за код такой, что он делает???


в начале, присваивается начальное значение переменной
SET @ii=6105
а затем в update эта переменная изменяется @ii=@ii+1
также в update число преобразуется в текст и происходит конкатенация с нулями '0000000000', а далее
от всего этого спава берем 10 знаков. 'N-' + 10 знаков.
Вот и получится

N-0000006105
N-0000800000
12 окт 11, 15:51    [11427829]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
iljy
Member

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

у вас коды уже присвоены, надо просто изменить их формат. А вы присваиваете их по новой, причем в произвольном порядке - зачем?
12 окт 11, 16:01    [11427947]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
trew
Member

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

Получилось так
DECLARE @code CHAR(12)
DECLARE @minus INT
SET @code ='N-0000800000'
SET @minus =800000 - 6105  -- сколько нужно отнять

--SELECT convert(int, substring(@code,3,11))-@minus
--SELECT  replicate('0',10-len(convert(int, substring(@code,3,11))-@minus )) 
SELECT 'N-' + replicate('0',10-len(convert(int, substring(@code,3,11))-@minus)) +
+ convert(varchar(10), convert(int, substring(@code,3,11))-@minus)

для UPDATE
where convert(int, substring(@code,3,11)) > 6105
12 окт 11, 16:29    [11428228]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
iljy
Member

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

вы чего сделать-то пытаетесь??
12 окт 11, 16:37    [11428339]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
trew
Member

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

выделить числа из номера и вычесть сколько нужно.
12 окт 11, 16:40    [11428367]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
trew
alexeyvg
Что же у вас за код такой, что он делает???

в начале, присваивается начальное значение переменной
SET @ii=6105
а затем в update эта переменная изменяется @ii=@ii+1
также в update число преобразуется в текст и происходит конкатенация с нулями '0000000000', а далее
от всего этого спава берем 10 знаков. 'N-' + 10 знаков.
Вот и получится

N-0000006105
N-0000800000
Да, это я понял... Вопрос - зачем он это делает???
Не было задачи присвоить полю Code какие то строки по какому-то алгоритму.
trew
iljy,

Получилось так
DECLARE @code CHAR(12)
DECLARE @minus INT
SET @code ='N-0000800000'
SET @minus =800000 - 6105  -- сколько нужно отнять

--SELECT convert(int, substring(@code,3,11))-@minus
--SELECT  replicate('0',10-len(convert(int, substring(@code,3,11))-@minus )) 
SELECT 'N-' + replicate('0',10-len(convert(int, substring(@code,3,11))-@minus)) +
+ convert(varchar(10), convert(int, substring(@code,3,11))-@minus)
для UPDATE
where convert(int, substring(@code,3,11)) > 6105
Опять неправильно :-(
12 окт 11, 16:40    [11428368]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
iljy
trew,

вы чего сделать-то пытаетесь??

Мне кажется, он пытается использовать "чужие" темы форума для отладки своих программных кодов )
12 окт 11, 16:42    [11428395]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
esli_chestno
Guest
Glory,
а вот мне, если уж совсем честно, кажется, что это просто "в каждую дырку затычка".
ну нафига было лезть в тему про прилинкованный сервер Oracle
и напоминать, что еще и оракловый клиент на компе должен быть?
какой уж он там код отлаживает, нафиг...
12 окт 11, 16:46    [11428438]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
iljy
Member

Откуда:
Сообщений: 8711
trew
iljy,

выделить числа из номера и вычесть сколько нужно.


Зачем?

Glory,

похоже...
12 окт 11, 16:47    [11428451]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
trew
Member

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

Мне кажется, он пытается использовать "чужие" темы форума для отладки своих программных кодов )

В какой-то степени да. Не покажешь свой код, никто и не научит как правильно.
12 окт 11, 16:53    [11428514]     Ответить | Цитировать Сообщить модератору
 Re: Изменение в строках таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
trew
В какой-то степени да. Не покажешь свой код, никто и не научит как правильно
Разве не проще создать топик, задать в нём вопрос и получить ответ? Или это слишком быстро для вас, неинтересно?
12 окт 11, 17:21    [11428783]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить