Знаю, что старая тема, но что-то прикололо... Тем более, что с немного похожими проблемами сейчас возюкаюсь... Вот накидал... Вроде работает... 

-- имитация таблицы исходных данных
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