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

Откуда:
Сообщений: 151
Хочу вывести все маршруты с пересадками. Выполняю рекурсивный запрос.

with cte as
(select id_vzlet, id_posadka, 1 as [level], cast('-'+id_vzlet+'-'+id_posadka+'-' as varchar(max)) as path
from marshrut

union all

select cte.id_vzlet, m.id_posadka, cte.[level]+1, cte.path+cast(m.id_posadka+'-' as varchar(max))
from marshrut m inner join cte
  on cte.id_posadka = m.id_vzlet
where cte.path not like cast('%-'+m.id_posadka+'-%' as varchar(max)))

select * from cte
order by [level], id_vzlet


Сообщение 245, уровень 16, состояние 1, строка 1
Ошибка преобразования значения varchar "%-" в тип данных int.
Я там вроде как int в varchar перевожу, ничего не понимаю.
17 июн 12, 21:58    [12727902]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
kim-kong, нужно сначала привести отдельно m.id_posadka, а потом складывать с другими строками
17 июн 12, 22:06    [12727921]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
kim-kong
Member

Откуда:
Сообщений: 151
что значит привести ?
17 июн 12, 22:11    [12727938]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
sskk
Guest
cast(m.id_posadka as varchar(max))

например так можно привести.
вы пытаетесь сложить m.id_posadka (целочисленный тип данных) со строковым типом.
17 июн 12, 22:21    [12727970]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
sskk
Guest
cast('-'+id_vzlet+'-'+id_posadka+'-' as varchar(max)) as path

этот кусок, как мне кажется, будет выдавать не те результаты, которые Вы хотите.
17 июн 12, 22:29    [12727996]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
kaygees
Member

Откуда:
Сообщений: 93
cast('-'+id_vzlet+'-'+id_posadka+'-' as varchar(max)) 

заменить на
'-'+cast(id_vzlet as varchar(max))+'-'+cast(id_posadka as varchar(max))+'-'
18 июн 12, 16:36    [12733002]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить