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

Откуда:
Сообщений: 19
Здравствуйте. В sql 2012 есть созданная мною функция которая должна возвратить число с запятой (намрипер 500.5). Но она возвращает только 500. Саму функцию, если использовать как простой код в sql query, выдает нормальное число 500.5..
Функцию вызываю через запрос например (select dbo.funcname(param) as aaa from tablename) Мучаюсь уже несколько дней, может кто-то сталкивался. Спасибо!!!
2 сен 14, 19:36    [16525508]     Ответить | Цитировать Сообщить модератору
 Re: Функция не возвращает число с запятой!!!  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37068
Ошибка в 17й строке.
2 сен 14, 19:46    [16525530]     Ответить | Цитировать Сообщить модератору
 Re: Функция не возвращает число с запятой!!!  [new]
a_voronin
Member

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

текст вашей функции не хотите привести
2 сен 14, 20:23    [16525631]     Ответить | Цитировать Сообщить модератору
 Re: Функция не возвращает число с запятой!!!  [new]
Sero
Member

Откуда:
Сообщений: 19
a_voronin, Выполняются несколько запросов результаты присваиваюстя к переменной с типом numeric(18,2) в конце прибавляются друг с другом. До команды return выводится число 500.5, но как только работает retrun число становится 500.
2 сен 14, 21:05    [16525731]     Ответить | Цитировать Сообщить модератору
 Re: Функция не возвращает число с запятой!!!  [new]
invm
Member

Откуда: Москва
Сообщений: 9404
Sero
Выполняются несколько запросов результаты присваиваюстя к переменной с типом numeric(18,2) в конце прибавляются друг с другом. До команды return выводится число 500.5, но как только работает retrun число становится 500.
Чем пересказывать содержимое функции, давно уже можно было бы показать ее текст. Или просто стыдно показывать?
Навскидку: проверьте тип результата функции, или у вас не функция, а процедура.
2 сен 14, 21:18    [16525773]     Ответить | Цитировать Сообщить модератору
 Re: Функция не возвращает число с запятой!!!  [new]
Sero
Member

Откуда:
Сообщений: 19
invm, Это самая настоящая функция. Раз обратился к форуму, значит не стыдно. И хватит хамить.....

USE [database]
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION  [dbo].[function] (@id int,priznak int)  
RETURNS INT AS  
BEGIN 
	DECLARE @summ numeric(18,2)
        if priznak=1
              set @summ=(select kol*cena from table where kod=@id)
        else
              set @summ=(select (itog/cena) from table where kod=@id) 

        RETURN @summ
end


Как проверить тип результата функции???
В таблице все поля тоже типа numeric(18,2)

Сообщение было отредактировано: 3 сен 14, 00:20
2 сен 14, 22:08    [16525946]     Ответить | Цитировать Сообщить модератору
 Re: Функция не возвращает число с запятой!!!  [new]
invm
Member

Откуда: Москва
Сообщений: 9404
Sero
И хватит хамить.....
А уважайте тех, у кого помощи просите.
Sero
RETURNS INT AS
Что и требовалось доказать.
2 сен 14, 22:16    [16525989]     Ответить | Цитировать Сообщить модератору
 Re: Функция не возвращает число с запятой!!!  [new]
Sero
Member

Откуда:
Сообщений: 19
invm, Спасибо Вам большое, просто код достался мне от другого человека....Функцию писал не я...
2 сен 14, 22:22    [16526001]     Ответить | Цитировать Сообщить модератору
 Re: Функция не возвращает число с запятой!!!  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37068
Sero
invm, Спасибо Вам большое, просто код достался мне от другого человека....Функцию писал не я...
Ответ был дан в первом же посте, только номер строки я не угадал. Но нет, просьба показать код - сразу хамство.

Сообщение было отредактировано: 3 сен 14, 00:26
3 сен 14, 00:22    [16526399]     Ответить | Цитировать Сообщить модератору
 Re: Функция не возвращает число с запятой!!!  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4260
....
RETURNS INT 
...


И в самом деле почему??? Мистика какая-то...
3 сен 14, 10:48    [16527371]     Ответить | Цитировать Сообщить модератору
 Re: Функция не возвращает число с запятой!!!  [new]
o-o
Guest
SQL2008,

мистика тут в другом, как такое вообще распарсилось,
параметр-то без @ (priznak)

а INT просто объясняeтся:
автор ф-ции, как и автор поста, "впервые видит UDF",
посему скатал пример из БОЛ-а, а у них там скалярка как раз возвращает INT
ну, вот вдруг INT -- обязательный элемент синтаксиса, лучше его не трогать.
авторский же текст заметен по нижнему регистру.
3 сен 14, 10:58    [16527438]     Ответить | Цитировать Сообщить модератору
 Re: Функция не возвращает число с запятой!!!  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4260
o-o, ваша правда.
Добавлю еще маленькое замечание
Вот кусок кода
 set @summ=(select kol*cena from table where kod=@id) 


А если в таблице несколько полей содержат kod равный @id?
Результатом будет последняя (по соображениям сервера) запись, а не сумма всех, как наверно полагал автор.
3 сен 14, 11:15    [16527579]     Ответить | Цитировать Сообщить модератору
 Re: Функция не возвращает число с запятой!!!  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4260
o-o
SQL2008,

мистика тут в другом, как такое вообще распарсилось,
параметр-то без @ (priznak)

Мало того, что ТС катит бочку, он еще и пример функции корявый прислал
Для интереса (а вдруг это прокатит в 2012) засунул в скрипт и выполнил.
Получил ожидаемое

Msg 102, Level 15, State 1, Procedure function, Line 1
Incorrect syntax near 'priznak'.


"Я вам тут всякую хрень буду присылать, а вы разберитесь и не хамите мне."
3 сен 14, 11:19    [16527617]     Ответить | Цитировать Сообщить модератору
 Re: Функция не возвращает число с запятой!!!  [new]
o-o
Guest
SQL2008
А если в таблице несколько полей содержат kod равный @id?
Результатом будет последняя (по соображениям сервера) запись, а не сумма всех, как наверно полагал автор.


нет, если kod неуникален, будет гораздо лучше:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

declare @table table (kod int, kol int, cena int);
insert into @table values (1, 10, 10), (1, 20, 20);
declare @id int = 1; 

DECLARE @summ numeric(18,2);
set @summ=(select kol*cena from @table where kod=@id);
3 сен 14, 11:32    [16527737]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить