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

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

25.02.2019, 08:14. Показов 1614. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru