Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950

Почему переменная всегда 0?

25.02.2019, 08:14. Показов 1596. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть такой триггер:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
DECLARE @studentsQuantity INT --Количество учеников в классе
       ,@certifiedQuantity INT --Количество аттестованных учеников
       ,@notCertifiedQuantity INT --Количество не аттестованных учеников
       ,@marksFiveQuantity INT --Количество отличников
       ,@marksFourQuantity INT --Количество ударников
       ,@marksThreeQuantity INT --Количество троечников
       ,@marksTwoQuantity INT --Количество двоечников
       ,@AcadPerformance REAL --Успеваемость
       ,@Quality REAL --Качество
       ,@currentId INT --ID текущей записи в таблице Inserted
 
SET @currentId = (SELECT Id FROM Inserted)
 
SET @studentsQuantity = (SELECT StudentsNum FROM Inserted)
SET @certifiedQuantity = (SELECT Certified FROM Inserted)
SET @notCertifiedQuantity = (SELECT NotCertified FROM Inserted)
SET @marksFiveQuantity = (SELECT MarksFive FROM Inserted)
SET @marksFourQuantity = (SELECT MarksFour FROM Inserted)
SET @marksThreeQuantity = (SELECT MarksThree FROM Inserted)
SET @marksTwoQuantity = (SELECT MarksTwo FROM Inserted)
 
SET @AcadPerformance = (@marksFiveQuantity + @marksFourQuantity + @marksThreeQuantity)/@studentsQuantity*100
SET @Quality = (@marksFiveQuantity + @marksFourQuantity)/@studentsQuantity*100
 
UPDATE QuarterResults SET AcadPerformance = @AcadPerformance WHERE Id = @currentId
UPDATE QuarterResults SET Quality = @Quality WHERE Id = @currentId
И почему-то переменная Quality всегда 0. Причем при правильных значениях остальных переменных. Как так?

Добавлено через 1 минуту
Мистика какая-то )

Добавлено через 2 минуты
Вот, например: @marksFiveQuantity = 2, @marksFourQuantity = 15, @studentsQuantity = 25. И всё равно получаем 0 почему-то.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.02.2019, 08:14
Ответы с готовыми решениями:

Переменная всегда null
Приветствую. Никак не пойму, почему переменная conf получается = null. Собственно порядок действий: Plug conf; public override...

Переменная $clientSession всегда содержит одно и тоже число
Есть файл header.php <?php session_start(); #даем посетителям номер $clientSession=$_SESSION; if (empty($clientSession)) { ...

Почему всегда 1 ?
В общем было задание написать функцию по переводу из лет в месяца: #include <iostream> using namespace std; int years(int); ...

5
21 / 16 / 6
Регистрация: 25.07.2017
Сообщений: 33
25.02.2019, 08:53
Лучший ответ Сообщение было отмечено DenKG как решение

Решение

Вы оперируете целыми числами.
Результат тоже целое число.
Вы видимо ожидаете, что
(2+15)/25 даст рузультат 0.68, но так как результат тоже целое число, то дробная часть откидывается и получаем ноль.
А умножение нуля на 100, тоже дает ноль.
Попробуйте:
T-SQL
1
SET @Quality = cast((cast(@marksFiveQuantity as float) + @marksFourQuantity)/@studentsQuantity*100 as int)
1
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
25.02.2019, 09:27  [ТС]
demind74, спасибо
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
25.02.2019, 09:59
Этот триггер - пример ужасного говнокода.
Ибо будет работать только для одной записи.
В inserted может быть сколько угодно записей (миллиард!!).
И что тогда?!
0
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
25.02.2019, 11:09  [ТС]
iap, а как сделать правильно?
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
25.02.2019, 11:34
Цитата Сообщение от DenKG Посмотреть сообщение
как сделать правильно?
T-SQL
1
2
3
4
5
6
7
update qr
 set
  AcadPerformance = (i.marksFiveQuantity + i.marksFourQuantity + i.marksThreeQuantity)/i.studentsQuantity*100,
  Quality = (i.marksFiveQuantity + i.marksFourQuantity)/i.studentsQuantity*100
from
 inserted i join
 QuarterResults qr on qr.Id = i.Id
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.02.2019, 11:34
Помогаю со студенческими работами здесь

Почему выводит всегда 0?
Почему при любом значении k выводится 0? #include <iostream> using namespace std; void main() { double k, j, i; ...

Почему всегда выполняется else?
$menu=$baza->query('SELECT `table_name` FROM `menu`'); while($array_menu=mysqli_fetch_array($menu)) { ...

Почему всегда выполняется else?
int g; g = Convert.ToInt32(textBox8.Text); for (int f = 0; f < n; f++) { ...

Почему выдаёт всегда 0?
Помогите. Почему выдаёт всегда 0?

Почему EOF всегда -1?
Помогите, плз! Использую EOF для возвращения конца входного потока. Например #include <stdio.h> main() { int c; while...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru