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

Откуда:
Сообщений: 2
Добрый день,

Существует табличка, с большим количеством данных. В поле, (например Data), содержатся значения в формате 1_***_2, где звездочки - это возрастающая нумерация, не обязательно трехзначная и последовательная.

Необходимо написать запрос, который обновит значения под звездочками по порядку новым списком. Список не обязательно должен начинаться с 1.

Какую функцию лучше использовать? Ну и помогите информацией по вопросу, уровень знаний крайне низкий.

Спасибо.
22 ноя 12, 15:09    [13513749]     Ответить | Цитировать Сообщить модератору
 Re: Запрос со счетчиком и подменой данных в середине строки.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37200
Спросите у того, кто спроектировал такую классную структуру данных.
22 ноя 12, 15:32    [13513956]     Ответить | Цитировать Сообщить модератору
 Re: Запрос со счетчиком и подменой данных в середине строки.  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
DECLARE @str varcha r(max)
SET @str ='1_23_3_4_2'
SELECT '<root><a>' + REPLACE(@str,'_','<a/><a>') + '</a></root>'

-- не получается в xml конвертнуть (ошибка)
SELECT CONVERT(xml,'<root><a>' + REPLACE(@str,'_','<a/><a>') + '</a></root>')
22 ноя 12, 15:40    [13514013]     Ответить | Цитировать Сообщить модератору
 Re: Запрос со счетчиком и подменой данных в середине строки.  [new]
Гость333
Member

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

1) А ежели закрывающий тэг корректно написать?
DECLARE @str varchar(max)
SET @str ='1_23_3_4_2'
SELECT '<root><a>' + REPLACE(@str,'_','</a><a>') + '</a></root>'

-- получается в xml конвертнуть (нет ошибки)
SELECT CONVERT(xml,'<root><a>' + REPLACE(@str,'_','</a><a>') + '</a></root>')


2) К чему это здесь?
22 ноя 12, 15:46    [13514079]     Ответить | Цитировать Сообщить модератору
 Re: Запрос со счетчиком и подменой данных в середине строки.  [new]
Glory
Member

Откуда:
Сообщений: 104751
select '1_'+STR(ROW_NUMBER())+'_2'
from mytable
22 ноя 12, 15:53    [13514126]     Ответить | Цитировать Сообщить модератору
 Re: Запрос со счетчиком и подменой данных в середине строки.  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Гость333
2) К чему это здесь?

Думаю результат представить в виде столбца(из xml), и изменить(update) его. А затем к первоначальному виду приводить.
22 ноя 12, 15:54    [13514129]     Ответить | Цитировать Сообщить модератору
 Re: Запрос со счетчиком и подменой данных в середине строки.  [new]
M.ode
Member

Откуда:
Сообщений: 2
Написал вот такой запрос:
+
create procedure my_procedure
as
DECLARE @i char(255);
declare @id_cursor cursor
DECLARE @sfname1 CHAR(255);
BEGIN
set @i = 1;
set @id_cursor = cursor local dynamic for
SELECT поле from таблица where поле like '%TEXT_%';
open @id_cursor
fetch next from @id_cursor into @sfname1
print @sfname1
print @i
if (@@fetch_status = 0)
while (@@fetch_status = 0)
begin
SET @i = @i + 1
set @sfname1 = @sfname1+(CAST(cast(@i AS VARCHAR(255)) as VARCHAR))
print @sfname1
print @i
update таблица set поле = @sfname1 where поле like '%TEXT_%'
fetch next from @id_cursor into @sfname1
end


close @id_cursor
deallocate @id_cursor
end


Но присвоение не работает, хотя i изменяется как нужно. Подскажите, в чем ошибка
23 ноя 12, 12:38    [13518466]     Ответить | Цитировать Сообщить модератору
 Re: Запрос со счетчиком и подменой данных в середине строки.  [new]
Гость333
Member

Откуда:
Сообщений: 3683
M.ode,

update таблица set поле = @sfname1 where поле like '%TEXT_%'

Этот запрос обновляет все записи в таблице, для которых выполняется условие "поле like '%TEXT_%'". А вам нужно обновлять по одной записи.
23 ноя 12, 12:56    [13518668]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить