powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL2000 ГЫГЫГЫ ;))) ГЛЮК !!! с функциями...
3 сообщений из 3, страница 1 из 1
SQL2000 ГЫГЫГЫ ;))) ГЛЮК !!! с функциями...
    #32002961
Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток...

Вот дурость... наткнулся на замечательную фичу ))
1. Есть UDF которая возвращает значения типа float или int
и имеет несколько входных параметров любого типа, назавем ее
func1( @P1 int, @P2 int, @P3 int ), выходное значение зависит от всех параметров !!!

2. Есть табличка TAB1 с полями ( Col1 int, Col2 int )

делаем запрос:

select dbo..func1( Col1, Col2, 1 ) as FuncPar1,
dbo..func1( Col1, Col2, 2 ) as FuncPar2
from TAB1

все нормально, выдается два столбца, с разными значениями
( поскольку третий параметр разный )...

делаем запрос:
select sum( dbo..func1( Col1, Col2, 1 ) ) as FuncPar1,
sum( dbo..func1( Col1, Col2, 2 ) ) as FuncPar2

8( ) !!! Получаем в два одинаковых столбца ;(
со значением первого столбца !!!

делаем:

select sum( dbo..func1( Col1, Col2, 1 ) ) as FuncPar1,
sum( dbo..func1( Col1, Col2, 2 ) ) as FuncPar2
group by Col1, Col2

получаем два полностью идентичных столбца

добавляем Col3 к таблице, и делаем:

select sum( dbo..func1( Col1, Col2, Col3 ) ) as FuncPar1,
sum( dbo..func1( Col1, Col2, Col3 ) ) as FuncPar2
group by Col1, Col2, Col3

Те же ГРАБЛИ !!!

Во второй столбец, если есть агрегаты, всегда попадпю значения из первого !!!!

)) выход один, кидать все в # или в переменную, а потом делать агрегирование !!!

Вот такие пираги... млин.... ;(

С уважением Прайс Николай.
...
Рейтинг: 0 / 0
SQL2000 ГЫГЫГЫ ;))) ГЛЮК !!! с функциями...
    #32002966
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да действительно, такая же фигня
пример чтобы проще было убедиться:
alter function f(@i1 int, @i2 int, @i3 int)
returns int
as
begin
declare @s int
set @s=@i1%100+@i2+@i3
return @s
end
go
select sum(dbo.f(id,info,1)), sum(dbo.f(id,info,2)) from sysobjects

select sum(dbo.f(id,info,1)) from sysobjects
select sum(dbo.f(id,info,2)) from sysobjects


спасает только
select sum(dbo.f(id,info,1)), sum(dbo.f(id,info,2)+0) from sysobjects

Видать что-то связано с оптимизацией, не хочет он второй раз выполнять функцию.
Ну нам не привыкать, будем ждать сервиспаков
...
Рейтинг: 0 / 0
SQL2000 ГЫГЫГЫ ;))) ГЛЮК !!! с функциями...
    #32003003
Фотография Дед Маздай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, до оптимизации здесь дело, похоже, не доходит. Посмотри аргумент оператора stream aggregate в плане, ты увидишь, что второй sum там вообще не валялся. Как следствие, те же яйца и на других агрегатных ф-циях.
Я думаю, что это не фича, а баг, и он будет исправлен в SP1. Мне кажется, что те, у кого с MS заключен контракт на premier support, могут получить hotfix немедленно (s80251i.exe). Возможно также, что в ближайшее время в Knowledge Base появится статья Q288957, в к-й может быть указано, где его взять по ftp.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL2000 ГЫГЫГЫ ;))) ГЛЮК !!! с функциями...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]