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

Откуда: Воронеж
Сообщений: 17
Добрый день!!

Подскажите пожалуйста, как рациональнее заполнить временную таблицу значениями, которые могут передаваться в процедуру исключительно в таком формате ('1300143616,1300143617,S300143621,1300143634,S300143656'), принципе алгоритм понятен, но не получается отделить переменные ((
SQL SERVER 2005
declare @EXTRORDERS varchar (400)
create TABLE @EXTRKEY (EXTRORDERKEY varchar(20))
set @EXTRORDERS = '1300143616,S300143617,1300143621,S300143634,1300143656'


-- временная таблица для хранения @EXTRORDERS
WHILE @EXTRORDERS <> '' BEGIN
                        insert into @EXTRKEY (EXTRORDERKEY) values (как то выделяем @EXTRORDERS до первой ",")
                        set @EXTRORDERS =  @EXTRORDERS, но уже без первого подмножества.
                        END
15 июл 13, 11:41    [14566313]     Ответить | Цитировать Сообщить модератору
 Re: вставить в таблицу подстроку  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Дмитрий-ВРН
Добрый день!!

Подскажите пожалуйста, как рациональнее заполнить временную таблицу значениями, которые могут передаваться в процедуру исключительно в таком формате ('1300143616,1300143617,S300143621,1300143634,S300143656'), принципе алгоритм понятен, но не получается отделить переменные ((
SQL SERVER 2005
declare @EXTRORDERS varchar (400)
create TABLE @EXTRKEY (EXTRORDERKEY varchar(20))
set @EXTRORDERS = '1300143616,S300143617,1300143621,S300143634,1300143656'


-- временная таблица для хранения @EXTRORDERS
WHILE @EXTRORDERS <> '' BEGIN
                        insert into @EXTRKEY (EXTRORDERKEY) values (как то выделяем @EXTRORDERS до первой ",")
                        set @EXTRORDERS =  @EXTRORDERS, но уже без первого подмножества.
                        END

Символ выбираем как-то так:
values(LEFT(@EXTRORDERS,CHARINDEX(',',@EXTRORDERS)-1))

Далее обрезаем.
SET @EXTRORDERS=RIGHT(@EXTRORDERS,LEN(@EXTRORDERS)-CHARINDEX(',',@EXTRORDERS))
15 июл 13, 11:48    [14566378]     Ответить | Цитировать Сообщить модератору
 Re: вставить в таблицу подстроку  [new]
Дмитрий-ВРН
Member

Откуда: Воронеж
Сообщений: 17
Сергей Викт.,

большое спасибо, все верно, что бы я без Вас то делал!!!
15 июл 13, 11:52    [14566419]     Ответить | Цитировать Сообщить модератору
 Re: вставить в таблицу подстроку  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Дмитрий-ВРН,

declare @x xml;

set @x = '<R><I Item="' + replace(@EXTRORDERS, ',', '"/><I Item="') + '"/></R>';

insert into @EXTRKEY (EXTRORDERKEY)
select t.c.value('./@Item', 'varchar(20)')
from @x.nodes('/R[1]/I') t(c);

select * from @EXTRKEY;
Только смотрите, чтобы в конце запятой не было. Ну и вообще, входные данные чистить надо будет.
15 июл 13, 11:52    [14566422]     Ответить | Цитировать Сообщить модератору
 Re: вставить в таблицу подстроку  [new]
Дмитрий-ВРН
Member

Откуда: Воронеж
Сообщений: 17
Ennor Tiegael,
спасибо - спасибо, я просто с XML и его возможностями еще не сталкивался, но огромное спасибо за ответ
15 июл 13, 12:01    [14566519]     Ответить | Цитировать Сообщить модератору
 Re: вставить в таблицу подстроку  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
Дмитрий-ВРН,

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


Рациональнее вставлять строки во временную таблицу напрямую или в процедуре сделать по параметру на одно поле создаваемой записи.
15 июл 13, 12:23    [14566742]     Ответить | Цитировать Сообщить модератору
 Re: вставить в таблицу подстроку  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Однако через XML тяжеловато получается, поэтому добавлю уже традиционные СТЕ
declare @EXTRORDERS varchar (400)
declare @EXTRKEY TABLE (EXTRORDERKEY varchar(20))
set @EXTRORDERS = '1300143616,S300143617,1300143621,S300143634,1300143656'

;with CTE as(
   select item=convert(varchar(20),left(v.list,a.idx-1)), list=convert(varchar(400),stuff(v.list,1,a.idx,''))
      from (values(@EXTRORDERS+','))v(list)
      cross apply (select CHARINDEX(',',v.list) idx) a
   union all
   select item=convert(varchar(20),left(v.list,a.idx-1)), list=convert(varchar(400),stuff(v.list,1,a.idx,''))
      from CTE v
      cross apply (select CHARINDEX(',',v.list) idx) a
      where v.list>''
   )
insert @EXTRKEY(EXTRORDERKEY)
select item from cte

select * from @EXTRKEY
15 июл 13, 14:05    [14567534]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить