Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как такое может быть? (Types don't match)  [new]
_Monah_
Member

Откуда: Минск
Сообщений: 199
Здравствуйте

Часть запроса
	FolderPath(FolderId, [Path], ParentPath) as
	(
		select fo.FolderId, CAST([Name] as nvarchar(max)), CAST(null as nvarchar(max))
		from AkopiFolder fo	
		where fo.ParentId is null
		union all
		select fo.FolderId, t.[Path] + '\' + fo.Name, t.[Path] as nvarchar(max)
		from AkopiFolder fo
			inner join FolderPath t
			on fo.ParentId = t.FolderId	
	)	
Ошибка:
Types don't match between the anchor and the recursive part in column "ParentPath" of recursive query "FolderPath".
19 июн 09, 17:46    [7322497]     Ответить | Цитировать Сообщить модератору
 Re: Как такое может быть? (Types don't match)  [new]
_Monah_
Member

Откуда: Минск
Сообщений: 199
Во второй части конечно
CAST(t.[Path] as nvarchar(max))
19 июн 09, 17:47    [7322505]     Ответить | Цитировать Сообщить модератору
 Re: Как такое может быть? (Types don't match)  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3205
cast(t.[Path] + N'\' + fo.Name as nvarchar(max))
19 июн 09, 17:50    [7322523]     Ответить | Цитировать Сообщить модератору
 Re: Как такое может быть? (Types don't match)  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
_Monah_
Во второй части конечно
CAST(t.[Path] as nvarchar(max))
Скорее всего и второе поле (там, где сумма) надо CASTом к NVARCHAR(MAX) привести...
И просто для порядка надо бы ещё N'\' вместо '\'
19 июн 09, 17:54    [7322556]     Ответить | Цитировать Сообщить модератору
 Re: Как такое может быть? (Types don't match)  [new]
_Monah_
Member

Откуда: Минск
Сообщений: 199
Не-а.
Помогло так. Но это шило какое-то:
CAST(case when len([Name]) < 0 then [Name] else null end as nvarchar(max))
На всякий случай
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)   Nov 24 2008 13:01:59   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
19 июн 09, 17:57    [7322572]     Ответить | Цитировать Сообщить модератору
 Re: Как такое может быть? (Types don't match)  [new]
_Monah_
Member

Откуда: Минск
Сообщений: 199
iap,

В рекурсивной части вообще кастовать не нужно. Куда уже больше, чем nvarchar(max) может выползти тип?
19 июн 09, 17:58    [7322585]     Ответить | Цитировать Сообщить модератору
 Re: Как такое может быть? (Types don't match)  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
_Monah_
iap,

В рекурсивной части вообще кастовать не нужно. Куда уже больше, чем nvarchar(max) может выползти тип?
Не знаю, как у Вас, а от меня сервер обычно требует точного соответствия типов.
Вы, вообще-то, пробовали или "чисто теоретически" рассуждаете?
Я на истину в последеней инстанции, конечно, не претендую.
19 июн 09, 18:58    [7322882]     Ответить | Цитировать Сообщить модератору
 Re: Как такое может быть? (Types don't match)  [new]
_Monah_
Member

Откуда: Минск
Сообщений: 199
Конечно пробовал
19 июн 09, 19:56    [7323012]     Ответить | Цитировать Сообщить модератору
 Re: Как такое может быть? (Types don't match)  [new]
_Monah_
Member

Откуда: Минск
Сообщений: 199
Оставил так

	FolderPath(FolderId, [Path], ParentPath) as
	(
		select fo.FolderId, CAST([Name] as nvarchar(max)), CAST(case when 1 < 0 then [Name] else null end as nvarchar(max))
		from AkopiFolder fo	
		where fo.ParentId is null
		union all
		select fo.FolderId, t.[Path] + '\' + fo.Name, t.[Path]
		from AkopiFolder fo
			inner join FolderPath t
			on fo.ParentId = t.FolderId	
	)
Осталось разобраться, почему так работает
19 июн 09, 20:01    [7323039]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить