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

Откуда:
Сообщений: 184
Имеется таблица :

DECLARE @tbl TABLE(id int identity(1,1),command varchar(max),[status] tinyint)
DECLARE @lt varchar(26) = 'LT657819430870439814797145' , @ip varchar(50) = '192.168.1.108' , @lang char(2) = 'FR'

insert into @tbl(command,[status]) 
values('exec dbo.t1 ''LT001121210870431061344546'',''127.0.0.1'',''EN'',1,45,65',0),
('exec dbo.t1 ''LT745621210870439814744565'',''192.168.1.100'',''EN'',3,11,23',0),
('exec dbo.t1 ''LT374681210887452661344178'',''192.168.1.105'',''EN'',2,7,8',0)


Первый параметр процедуры всегда начинается с 'LT'. Хочу сделать UPDATE таблицы и заменить первые три параметра вызова на другие.Например сделать UPDATE столбца command где ID = 1. Я просто не знаю как правильно сделать Replace в данном случае.
Результат должен быть следующим для id = 1 :
exec dbo.t1 'LT657819430870439814797145','192.168.1.108','FR',1,45,65


Заранее спасибо !
13 май 15, 13:09    [17633658]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
Glory
Member

Откуда:
Сообщений: 104751
update mytable set f1 = , f2 = ... where id = 1
13 май 15, 13:12    [17633683]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
NewBie77
Member

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

Это вы написали пример UPDATE-а, это я и сам знаю . Мне нужно заменить 3 параметра, не понимаю как правильно Replace вставить.
Нужно чтото типа :
UPDATE @tbl
SET command = и тут сделать Replace 3 параметров процедуры 
WHERE id =1 
13 май 15, 13:18    [17633719]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
Glory
Member

Откуда:
Сообщений: 104751
NewBie77
Мне нужно заменить 3 параметра, не понимаю как правильно Replace вставить.


UPDATE @tbl
SET command = @lt + @ip + @lang
WHERE id =1
13 май 15, 13:20    [17633734]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
Merdoc
Member

Откуда: Новосибирск
Сообщений: 103
NewBie77,
Может пока не поздно введете в свою таблицу колонки для каждого из параметров?

Касательно replace
Тут проще на подстроки разбить мне кажется и потом склеить снова
Придется с instr и substr поиграться
13 май 15, 13:21    [17633741]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
NewBie77
Member

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

Данный UPDATE запишет только
'LT657819430870439814797145','192.168.1.108','FR'
а мне нужно
exec  'LT657819430870439814797145','192.168.1.108','FR',1,45,65'
13 май 15, 13:22    [17633752]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
Glory
Member

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

Данный UPDATE запишет только
'LT657819430870439814797145','192.168.1.108','FR'

а мне нужно
exec  'LT657819430870439814797145','192.168.1.108','FR',1,45,65'

Значит вам нужны еще3 дополнительные переменные
13 май 15, 13:23    [17633761]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
NewBie77
Member

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

Дело в том что я не знаю точно сколько будет параметров в процедуре, знаю точно что первые три всегды будут,поэтому не знаю на сколько колонок разбить
13 май 15, 13:25    [17633785]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
Merdoc
Member

Откуда: Новосибирск
Сообщений: 103
NewBie77,
Сделайте первые три отдельных и колонку "остальное" )))
13 май 15, 13:26    [17633800]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
NewBie77
Member

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

Количество параметров для всех процедур разное , там я просто для примера привел 6 параметров, знаю точно что первые три всегда будут и только их мне придется менять
13 май 15, 13:27    [17633813]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
Glory
Member

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

Количество параметров для всех процедур разное , там я просто для примера привел 6 параметров, знаю точно что первые три всегда будут и только их мне придется менять

replace вам не поможет в любом случае
13 май 15, 13:29    [17633832]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
NewBie77
Member

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

Посоветуйте куда копать, а думал через CHARINDEX найти номер строки TL затем EN' и заменить SUBSTRING-ом
13 май 15, 13:31    [17633858]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
Glory
Member

Откуда:
Сообщений: 104751
NewBie77
Посоветуйте куда копать

Это типовая задача. Называется она парсинг/разбор строки с разделителем
13 май 15, 13:33    [17633879]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
Merdoc
Member

Откуда: Новосибирск
Сообщений: 103
NewBie77,
Ага, именно туда и копать
Вроде такого бреда
select 
replace(command,
        substring(
          command,
          charindex('''',command),
          charindex(''',',command)-charindex('''',command)
          ),
        'LT657819430870439814797145')
from  
(select 'exec dbo.t1 ''LT001121210870431061344546'',''127.0.0.1'',''EN'',1,45,65' command) a
13 май 15, 13:46    [17634024]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
NewBie77
Member

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

Спасибо !
13 май 15, 13:53    [17634095]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
Tketano
Member

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

Или такого:

UPDATE @tbl
SET command = SUBSTRING(command, 1, CHARINDEX('''LT', command)) + @lt + ''',''' + @ip + ''',''' + @lang + ''''

+ SUBSTRING(command, CHARINDEX(',', command, CHARINDEX(',', command, CHARINDEX(',', command) + 1) + 1), 100)
13 май 15, 13:56    [17634131]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
Merdoc
Member

Откуда: Новосибирск
Сообщений: 103
NewBie77,
Вы кстати посмотрите не стандартная ли длина у ваших параметров? Тогда можно вообще просто высчитать параметры для substring без поиска patindex
Если нет, то поиск 2го и 3го параметров - будут еще веселее.

P.s. подумайте об отдельных колонках.
13 май 15, 13:57    [17634134]     Ответить | Цитировать Сообщить модератору
 Re: Replace столбца в таблице во время UPDATE  [new]
NewBie77
Member

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

Ого ! Огромное спасибо, работает отлично.
13 май 15, 14:02    [17634180]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить