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

Откуда: Москва
Сообщений: 44
select top 1
*

	,isnull(участники2.подразделение_наследника,
		(
			select 
			(
				select подразделения.descr
				from SC16 юл
				left join SC69 подразделения
				on юл.SP1963=подразделения.id
				where юл.id = ветераны.юл
			) подразделение_ветерана
			from 
			(
				select top 1
				выплаты.sp1389 юл
				from dt1400 список1 
				inner join dh1400 выплаты
				on выплаты.iddoc = список1.iddoc
				where  			
					список1.sp1393 = участники2.УчастникДоходы -- !!!!! 
/*
участники2.УчастникДоходы -  вот эту переменную в 2005 здесь видно, а в 2000 не видно
кто нибудь объясните почему?
*/
				order by выплаты.sp1387 desc
			) ветераны
		) 
	) подразделение_ветерана

	from
	(

		select 
		*
		,isnull(участники1.УчастникДоходы,(
					select
					подразделения.descr as подразделение
					from DT866 наследники
					left join DH866 выплаты
					on наследники.iddoc = выплаты.iddoc
					left join SC16 юл
					on выплаты.SP869 = юл.id
					left join SC69 подразделения
					on юл.SP1963=подразделения.id
					where 
					(наследники.SP1331 = участники1.УчастникДоходы 
					--or наследники.SP1331 = участники1.УчастникВычеты 
					--or наследники.SP1331 = участники1.УчастникНДФЛ
					)
			)
		) подразделение_наследника
		from
		(
			select
			УчастникДоходы
			,Доходы
			,Вычеты
			,РасчетНДФЛ
			from
			(
				...
			) Расчет

		) участники1
) участники2
25 окт 11, 17:25    [11497586]     Ответить | Цитировать Сообщить модератору
 Re: Выполняется в 2005, но не выполняется в 200 кто нибудь объясните почему?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
b099ard,

ошибка-то какая?
25 окт 11, 17:26    [11497606]     Ответить | Цитировать Сообщить модератору
 Re: Выполняется в 2005, но не выполняется в 200 кто нибудь объясните почему?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Текст ошибки полностью и целиком запрос покажите.
25 окт 11, 17:29    [11497638]     Ответить | Цитировать Сообщить модератору
 Re: Выполняется в 2005, но не выполняется в 200 кто нибудь объясните почему?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Если не ошибаюсь, до 2000-го в подзапросе были видны поля только самого подзапроса
и ближайшего по иерархии к нему внешнего запроса. А с 2005-го стали видны поля всех внешних запросов.

Могу ошибаться, ибо давно не заморачиваюсь этим - SQL 2000 у нас похоронили...
25 окт 11, 17:37    [11497740]     Ответить | Цитировать Сообщить модератору
 Re: Выполняется в 2005, но не выполняется в 200 кто нибудь объясните почему?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
iap
Если не ошибаюсь, до 2000-го в подзапросе были видны поля только самого подзапроса
и ближайшего по иерархии к нему внешнего запроса. А с 2005-го стали видны поля всех внешних запросов.

Могу ошибаться, ибо давно не заморачиваюсь этим - SQL 2000 у нас похоронили...
Там звезда стоит, соответственно, должно все видно быть.
25 окт 11, 17:39    [11497757]     Ответить | Цитировать Сообщить модератору
 Re: Выполняется в 2005, но не выполняется в 200 кто нибудь объясните почему?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Гавриленко Сергей Алексеевич
iap
Если не ошибаюсь, до 2000-го в подзапросе были видны поля только самого подзапроса
и ближайшего по иерархии к нему внешнего запроса. А с 2005-го стали видны поля всех внешних запросов.

Могу ошибаться, ибо давно не заморачиваюсь этим - SQL 2000 у нас похоронили...
Там звезда стоит, соответственно, должно все видно быть.
Внутри самого вложенного подзапроса?
Никогда не задумывался о такой особенной роли звёздочки... Правда, что ли?
25 окт 11, 17:43    [11497821]     Ответить | Цитировать Сообщить модератору
 Re: Выполняется в 2005, но не выполняется в 200 кто нибудь объясните почему?  [new]
b099ard
Member

Откуда: Москва
Сообщений: 44
Гавриленко Сергей Алексеевич,

select 
*

	,isnull(участники2.подразделение_наследника,
		(
			select 
			(
				select подразделения.descr
				from SC16 юл
				left join SC69 подразделения
				on юл.SP1963=подразделения.id
				where юл.id = ветераны.юл
			) подразделение_ветерана
			from 
			(
				select top 1
				выплаты.sp1389 юл
				from dt1400 список1 
				inner join dh1400 выплаты
				on выплаты.iddoc = список1.iddoc
				where  			
					список1.sp1393 = участники2.УчастникДоходы -- !!!!! 
/*
участники2.УчастникДоходы -  вот эту переменную в 2005 здесь видно, а в 2000 не видно
кто нибудь объясните почему?
*/
				order by выплаты.sp1387 desc
			) ветераны
		) 
	) подразделение_ветерана

	from
	(

		select 
		*
		,isnull(участники1.УчастникДоходы,(
					select
					подразделения.descr as подразделение
					from DT866 наследники
					left join DH866 выплаты
					on наследники.iddoc = выплаты.iddoc
					left join SC16 юл
					on выплаты.SP869 = юл.id
					left join SC69 подразделения
					on юл.SP1963=подразделения.id
					where 
					(наследники.SP1331 = участники1.УчастникДоходы 
					--or наследники.SP1331 = участники1.УчастникВычеты 
					--or наследники.SP1331 = участники1.УчастникНДФЛ
					)
			)
		) подразделение_наследника
		from
		(
			select
			УчастникДоходы
			,Доходы
			,Вычеты
			,РасчетНДФЛ
			from
			(
				select 1 УчастникДоходы
				,2.3 Доходы
				,3.3 Вычеты
				,4.4 РасчетНДФЛ
			) Расчет

		) участники1
) участники2


Server: Msg 207, Level 16, State 3, Line 1
Invalid column name 'УчастникДоходы'.
25 окт 11, 17:50    [11497909]     Ответить | Цитировать Сообщить модератору
 Re: Выполняется в 2005, но не выполняется в 200 кто нибудь объясните почему?  [new]
b099ard
Member

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

Слава богу я не одинок. Теперь понятно почему мне нутро говорило что такой запрос работать не будет :)
25 окт 11, 17:53    [11497936]     Ответить | Цитировать Сообщить модератору
 Re: Выполняется в 2005, но не выполняется в 200 кто нибудь объясните почему?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
b099ard,

навскидку, запрос выглядит ужасным. Неужели нельзя проще,
с минимумом производных таблиц и коррелированных подзапросов?
Хотя, я сейчас не могу утверждать, что это непременно плохо, конечно...
25 окт 11, 17:53    [11497939]     Ответить | Цитировать Сообщить модератору
 Re: Выполняется в 2005, но не выполняется в 200 кто нибудь объясните почему?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Да уж. 2000й не найти.
25 окт 11, 17:55    [11497963]     Ответить | Цитировать Сообщить модератору
 Re: Выполняется в 2005, но не выполняется в 200 кто нибудь объясните почему?  [new]
b099ard
Member

Откуда: Москва
Сообщений: 44
iap,
Сразу вспомнилось: Когда русского программиста просят дописать программу, первое его желание ее переписать...

Это _один_ запрос, как ты напишешь один запрос без корелированных запросов? Очень интересно услышать какие либо предложения по оптимизации. :D
26 окт 11, 12:27    [11501587]     Ответить | Цитировать Сообщить модератору
 Re: Выполняется в 2005, но не выполняется в 200 кто нибудь объясните почему?  [new]
iljy
Member

Откуда:
Сообщений: 8711
b099ard,

вы действительно считаете, что кореллированные подзапросы - единственный способ связывания? Ваша крокозябла достаточно тривиально переписываете через джойны.
26 окт 11, 12:35    [11501721]     Ответить | Цитировать Сообщить модератору
 Re: Выполняется в 2005, но не выполняется в 200 кто нибудь объясните почему?  [new]
b099ard
Member

Откуда: Москва
Сообщений: 44
iljy,

это не криворукость - это оптимизация :)
26 окт 11, 12:39    [11501792]     Ответить | Цитировать Сообщить модератору
 Re: Выполняется в 2005, но не выполняется в 200 кто нибудь объясните почему?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
b099ard
iljy,

это не криворукость - это оптимизация :)
Какая в ней ценность, если в результате не работает на Вашей версии сервера?
26 окт 11, 12:51    [11501943]     Ответить | Цитировать Сообщить модератору
 Re: Выполняется в 2005, но не выполняется в 200 кто нибудь объясните почему?  [new]
b099ard
Member

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

Мы обновили сервер.
26 окт 11, 12:56    [11502009]     Ответить | Цитировать Сообщить модератору
 Re: Выполняется в 2005, но не выполняется в 200 кто нибудь объясните почему?  [new]
iap
Member

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

Мы обновили сервер.
А тогда у Вас уже нет проблем?
26 окт 11, 14:09    [11502830]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить