|
SQL2000 ГЫГЫГЫ ;))) ГЛЮК !!! с функциями...
|
|||
---|---|---|---|
#18+
Доброго времени суток... Вот дурость... наткнулся на замечательную фичу )) 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 Те же ГРАБЛИ !!! Во второй столбец, если есть агрегаты, всегда попадпю значения из первого !!!! )) выход один, кидать все в # или в переменную, а потом делать агрегирование !!! Вот такие пираги... млин.... ;( С уважением Прайс Николай. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2001, 21:45 |
|
SQL2000 ГЫГЫГЫ ;))) ГЛЮК !!! с функциями...
|
|||
---|---|---|---|
#18+
Да действительно, такая же фигня пример чтобы проще было убедиться: 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 Видать что-то связано с оптимизацией, не хочет он второй раз выполнять функцию. Ну нам не привыкать, будем ждать сервиспаков ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2001, 10:51 |
|
SQL2000 ГЫГЫГЫ ;))) ГЛЮК !!! с функциями...
|
|||
---|---|---|---|
#18+
Нет, до оптимизации здесь дело, похоже, не доходит. Посмотри аргумент оператора stream aggregate в плане, ты увидишь, что второй sum там вообще не валялся. Как следствие, те же яйца и на других агрегатных ф-циях. Я думаю, что это не фича, а баг, и он будет исправлен в SP1. Мне кажется, что те, у кого с MS заключен контракт на premier support, могут получить hotfix немедленно (s80251i.exe). Возможно также, что в ближайшее время в Knowledge Base появится статья Q288957, в к-й может быть указано, где его взять по ftp. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2001, 21:55 |
|
|
start [/forum/topic.php?fid=46&msg=32002961&tid=1827210]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 273ms |
total: | 397ms |
0 / 0 |