Ускорение работы запросов или рекурсивный вызов функций

mkliver
Дата: 25.02.2013 12:18:07
Гость333,

Я избрал второй путь и вот что вышло.

автор
CREATE table RoadTezt(
road_id character varying(100),
name character varying(100),
the_geom geometry,
rn int,
segment_id character varying(100)
);
IF OBJECT_ID('tempdb..#by_segment') IS NOT NULL
DROP TABLE #by_segment;

SELECT
Road.Road_ID,
Road.Name,
Segment_ID.Segment_ID,
GEOMETRY::STGeomFromText(Track.Track.STAsText(),4326) as the_geom,
row_number() over (partition by Road.road_id order by Segment_id.Segment_Id) as [rn]
-- count(*) over (partition by road.road_id) as [c]
INTO #by_segment
FROM dbo.Road
LEFT JOIN Segment_ID ON Road.Road_ID = Segment_ID.Road_ID
LEFT JOIN Track ON Segment_ID.Segment_ID = Track.Segment_ID;

-- Может, надо создать другой индекс, или вообще без индекса будет хорошо
CREATE INDEX i ON #by_segment(rn, segment_id);

with roads_by_segment as (
select
road_id,
Name,
the_geom,
[rn],
--[c],
[segment_id]
from #by_segment
where [rn] = 1

union all

select
[a].road_id,
[a].Name,
[a].the_geom.STUnion([b].the_geom),
[b].[rn],
-- [b].[c],
[b].[segment_id]
from #by_segment as [a]
inner join roads_by_segment as [b]
on [a].segment_id = [b].[segment_id]
and [a].[rn] = [b].[rn]+1
)
Insert RoadTezt(road_id,name,the_geom,rn,segment_id)
select road_id,name,the_geom,rn,segment_id from roads_by_segment;


И выдает ошибку

(строк обработано 147)
Сообщение 8152, уровень 16, состояние 14, строка 26
Символьные или бвоичные данные могут быть усечены
Выполнение данной инструкции было прервано.

Я опять что то не так сделал?(
Glory
Дата: 25.02.2013 12:25:23
mkliver
Я опять что то не так сделал?(

Пытаетесь добавить в поле(я) больше данных, чем оно может вместить
mkliver
Дата: 25.02.2013 12:26:47
Гость333,

Да, простые запросы оно делает, если что то под сторонним ПО понимается Gеoserver.
Но проблема, что как раз сложить то в таблицу я ничего и не могу ошибки вылазят.
mkliver
Дата: 25.02.2013 12:27:29
Glory,

Расширил текстовые поля до 250 символов - не помогло(
Гость333
Дата: 25.02.2013 12:29:36
mkliver
У меня есть база:

автор
Track

Segment_ID(character),
Track (geometry)

Segment_ID

Segment_ID(character),
Road_ID(character)

Road

Road_ID(character),
Name(character)

Вот эти "character" можно расписать подробнее — по сколько символов отведено на каждый?
mkliver
Дата: 25.02.2013 12:30:01
mkliver,

Оказалось что 250 символов это не предел нужно было расширить до 300.
Glory
Дата: 25.02.2013 12:35:24
mkliver
Расширил текстовые поля до 250 символов - не помогло(

А посмотреть размер _добавляемых_ данных не пробовали ?
mkliver
Дата: 25.02.2013 12:36:15
Гость333,

Тут я прокололся знатно, почему-то по привычке считал что в поле character не может быть больше 250 знаков.
Но все взлетело большое спасибо всем участникам дискусии!!
Гость333
Дата: 25.02.2013 12:41:40
mkliver
по привычке считал что в поле character не может быть больше 250 знаков

Откуда такая привычка? :-)

Честно говоря, плохо сочетается "Я сам не силен в sql" и "посмотрите, я тут написал запрос с рекурсивным CTE, оконными функциями, блэкджеком...
mkliver
Дата: 25.02.2013 16:43:55
Гость333,

автор
Откуда такая привычка? :-)


Недавно было мое первое знакомство с sql. На постгресе кучу таблиц ваять нужно было, дак вот все строковые поля были charactrer varying(250). Вот от туда и тянется такая ассоциация.