Знаю, что старая тема, но что-то прикололо... Тем более, что с немного похожими проблемами сейчас возюкаюсь... Вот накидал... Вроде работает...
-- имитация таблицы исходных данных
declare @tab table (id_rub int, InventoryID varchar(16), name_rubriki nvarchar (256))
insert @tab select 1, '046144', N'Техника, технология, методика геологоразведочных работ'
insert @tab select 2, '056155', N'Тактика, стратегия разведения кроликов'
-- конец иммитации
declare @outtab table (id_rub int, InventoryID varchar(16), name_rubriki nvarchar (64))
declare @id_rub int, @InventoryID varchar(16), @name_rubriki nvarchar (64),
@i int, @j int, @len int
declare rub_cursor cursor
for select id_rub, InventoryID, name_rubriki from @tab
open rub_cursor
FETCH NEXT FROM rub_cursor
INTO @id_rub, @InventoryID, @name_rubriki
WHILE @@FETCH_STATUS = 0
BEGIN
set @len = (select len(@name_rubriki) from @tab where id_rub = @id_rub)
set @i = 1
set @j = 1
while (@j < @len)
begin
set @j = (select CHARINDEX( ',', @name_rubriki, @i))
if @j = 0 set @j = @len else set @j = @j
insert @outtab (id_rub, InventoryID, name_rubriki)
select @id_rub, @InventoryID,
substring(@name_rubriki, @i, @j-@i+1)
print cast(@i as varchar(16))+'/'+cast (@j-@i as varchar(16))+'/'+cast(@len as varchar(16))
set @i = @j+1
end
FETCH NEXT FROM rub_cursor
INTO @id_rub, @InventoryID, @name_rubriki
END
CLOSE rub_cursor
DEALLOCATE rub_cursor
select * from @outtab
go