mov68 писал(а) 19. Марта 2008 :: 15:24:Цитата:[quote author=Salimbek link=1205824610/0#3 date=1205842387]А зачем все это?
В принципе я в конечном итоге уже написал разбор данных ....
А нельзя ли глянуть?
Думаю текст запросов ничего не даст. Общий принцип такой:
1. В строке находится строго типизированная таблица значений.
2. Открываешь курсор и разбираешь каждую строку. При разборе загоняешь в таблицу.
3. Потом таблицу можно привертеть к любой др. выборке.
пример на ТЗ с тремя полями:
1 поле строка, 2 поле строка, 3 поле число
DECLARE tables_cursor CURSOR
FOR SELECT *
FROM #prom_spis_rekv
OPEN tables_cursor
FETCH NEXT FROM tables_cursor INTO @r,@iddoc
WHILE (@@FETCH_STATUS <> -1) BEGIN
IF substring(@r,1,18)='{"ТаблицаЗначений"' BEGIN
SELECT @r=substring(@r,charindex('{{"Товар"',@r,2)+2,len(@r))
SELECT @r=substring(@r,charindex('{{',@r,2)+2,len(@r))
set @kolvo=0
while charindex('},{"Реквизит"',@r,1)>1 BEGIN
SELECT @kolvo=@kolvo+1
SELECT @r=substring(@r,charindex('"Строка"',@r,1)+10,len(@r))
INSERT INTO #spis_rekv (iddoc,rowno,article)
VALUES(@iddoc,@kolvo,substring(@r,1,charindex('"',@r,2)-1))
SELECT @r=substring(@r,charindex('"',@r,1)+3,len(@r))
end
SELECT @r=substring(@r,charindex('{{',@r,2)+1,len(@r))
SET @i=1
while @i<=@kolvo BEGIN
SELECT @r=substring(@r,charindex('"Строка"',@r,2)+10,len(@r))
update #spis_rekv
SET Property=substring(@r,1,charindex('"',@r,2)-1)
WHERE RowNo=@i AND iddoc=@iddoc
SELECT @i=@i+1
END
SELECT @r=substring(@r,charindex('{{',@r,2)+1,len(@r))
SET @i=1
while @i<=@kolvo BEGIN
SELECT @r=substring(@r,charindex('"Число"',@r,2)+9,len(@r))
update #spis_rekv
SET kolvo=cast(rtrim(ltrim(substring(@r,1,charindex('"',@r,2)-1))) as money)
WHERE RowNo=@i AND iddoc=@iddoc
SELECT @i=@i+1
END
END
FETCH NEXT FROM tables_cursor INTO @r,@iddoc
END
DEALLOCATE tables_cursor