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

Откуда:
Сообщений: 16
Дана БД полностью заполненная. Дано задание написать функцию для подсчета суммы двух строк из 1 таблицы. При изменений какой либо строки, требуется моментальное обновление той строки, в которой должна была вписаться сумма.
Поначалу была написана такая функция, но сказали что слишком просто, нужна автообновляющаяся строка. Помогите кто нибудь пожалуйста. Хотя бы задайте направление. В SQL запросах пока новичок.

CREATE FUNCTION GetCountOfLect7
(@uid int,
@res int) 
RETURNS int
AS
BEGIN
declare @Lection_Hours int;
declare @Practice_Hours int ;
declare @Labor_Hours int;
SELECT @Labor_Hours=Labor_Hours, @Practice_Hours=Practice_Hours, @Lection_Hours=Lection_Hours
FROM StudySchema.Subjects S WHERE Subj_ID=@uid
select @res = SUM(@Labor_Hours + @Practice_Hours + @Lection_Hours)


return	 @res
END

Select dbo.GetCountOfLect7(1005,1) as 'Total', * from StudySchema.Subjects
where Subj_ID=1005
30 мар 15, 15:40    [17450558]     Ответить | Цитировать Сообщить модератору
 Re: Функции в MS SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
smbekzat
Поначалу была написана такая функция, но сказали что слишком просто, нужна автообновляющаяся строка.

Наверное потому, что в функцию нужно не константы передавать,а значения полей при запросе

ЗЫ
А select @res = SUM(@Labor_Hours + @Practice_Hours + @Lection_Hours) - это шедевр
30 мар 15, 15:44    [17450580]     Ответить | Цитировать Сообщить модератору
 Re: Функции в MS SQL  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4264
Почитайте про вычисляемые поля.
Узнаете много интересного и, надеюсь, полезного
30 мар 15, 15:47    [17450600]     Ответить | Цитировать Сообщить модератору
 Re: Функции в MS SQL  [new]
smbekzat
Member

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

ну к этим константам ведь передаются сами поля
30 мар 15, 15:55    [17450638]     Ответить | Цитировать Сообщить модератору
 Re: Функции в MS SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
smbekzat
ну к этим константам ведь передаются сами поля

что ?
Select dbo.GetCountOfLect7(1005,1) для каждой записи вычислит одно и тоже значение. Потому что входные параметры будут всегда 1005 и 1
30 мар 15, 15:57    [17450648]     Ответить | Цитировать Сообщить модератору
 Re: Функции в MS SQL  [new]
smbekzat
Member

Откуда:
Сообщений: 16
Все, что требовалось оказалось триггером. Тему можно закрывать

CREATE TRIGGER Lalala ON  StudySchema.Subjects FOR UPDATE AS 
BEGIN
 SET NOCOUNT ON;
 UPDATE T
    SET T.total=T.Lection_Hours+T.Practice_Hours+T.Labor_Hours
    FROM StudySchema.Subjects T
    
END
30 мар 15, 16:31    [17450828]     Ответить | Цитировать Сообщить модератору
 Re: Функции в MS SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
smbekzat
Все, что требовалось оказалось триггером.

А в задании была функция
30 мар 15, 16:38    [17450873]     Ответить | Цитировать Сообщить модератору
 Re: Функции в MS SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
smbekzat
CREATE TRIGGER Lalala ON  StudySchema.Subjects FOR UPDATE AS 
BEGIN
 SET NOCOUNT ON;
 UPDATE T
    SET T.total=T.Lection_Hours+T.Practice_Hours+T.Labor_Hours
    FROM StudySchema.Subjects T
    
END

Ваш триггер при обновлении даже 0-ля записей будет пересчитывать поле total для всех записей
30 мар 15, 16:41    [17450897]     Ответить | Цитировать Сообщить модератору
 Re: Функции в MS SQL  [new]
StarikNavy
Member

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

ваш триггер каждый раз будет пересчитывать _всю_ таблицу
30 мар 15, 16:43    [17450914]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить