С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 28

Криво работает

09.01.2016, 04:41. Показов 1529. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня задание "Создать триггер. Нужно, чтобы при изменении столбца ПРЕМИЯ, у меня столбец ИТОГО пересчитывался по формуле SUM(Zarplata*Premia) (примерно). Построчно. для любого количества человек.

\\\\Проблема в том, что мой триггер только третью строчку пересчитывает правильно, остальные ни в какую или не правильно с ошибками вообще.\\\\ Пыталась разобраться, но многие варианты не работали.

Вызываю потом через запрос
"Update Doctor
Set Premia = 355
Where IDDoctor =1"







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
27
28
29
30
31
USE [Hospital]
GO
/****** Object:  Trigger [dbo].[Zarplata]    Script Date: 09.01.2016 4:28:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Zarplata]
 ON [dbo].[Doctor]
 AFTER UPDATE
 AS
 BEGIN
    SET NOCOUNT ON;
     DECLARE @Summa INT
     DECLARE @Premia FLOAT
     DECLARE @Zarplata INT
     DECLARE @id1 INT
 
     SELECT @Premia=Premia
     FROM dbo.Doctor
 
     SELECT @Zarplata=Zarplata
     FROM dbo.Doctor
 
     SELECT @id1=IDDoctor
     FROM dbo.Doctor
 
     SET @Summa=SUM(@Zarplata*@Premia)
     
     UPDATE Doctor SET ITOGO=@Summa WHERE IDDoctor=@id1
END
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.01.2016, 04:41
Ответы с готовыми решениями:

Криво переносится mdb файл
Здравствуйте, уважаемые. Пробую перетащить БД access на mssql2017 с помощью стандартной утилиты "Импорт и экспорт данных SQL Server...

Криво работает do while
Есть рабочий код на паскале, var a, k, s, b, x1, x2, y1, y2, h: real; n, j: integer; begin a := -1; b := 1; n :=...

Криво работает LoadStringW
Файл описания ресурсов: STRINGTABLE { 0, L"Create" 1, L"Создать" 2, L"Edit mesh" 3, L"Редактировать модель" 4,...

8
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
09.01.2016, 10:12
он криво работает, потому что ты его криво написал.
открой для себя псевдотаблицу inserted и именно её используй в триггере.

да, и ещё. триггер нужно вешать не только на FOR UPDATE, но и на FOR INSERT, иначе новые вставляемые записи не будут обрабатываться.
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
09.01.2016, 11:01
Можно это реализовать без триггеров написать простой SELECT ... (Zarplata*Premia) FROM Table и потом создать представления-view тут будет ваши запрос ...
представления можно вызвать Select как таблица
0
0 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 28
09.01.2016, 13:47  [ТС]
Знаю, что криво написала( По другому не знаю.
Т.е. еще один триггер нужно создавать или в моём же можно писать For insert?
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
09.01.2016, 14:32
Цитата Сообщение от Alex13889 Посмотреть сообщение
Знаю, что криво написала( По другому не знаю.
Да дела не в этом ... Триггер не применяется для вычисляемые поля который можно написать простим SELECT-е
0
0 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 28
09.01.2016, 23:24  [ТС]
Цитата Сообщение от xxbesoxx Посмотреть сообщение
Можно это реализовать без триггеров написать простой SELECT
Но мне то нельзя без триггера делать это задание. ТРИГГЕР обязателен! Мой работает только для ПОСЛЕДНЕЙ строки правильно(3), а для других нет.

Даже простым SELECT-ом сделать так, чтобы он мне пересчитывал последний столбец для меня сложно. =(

Добавлено через 40 минут
Цитата Сообщение от Sergio Leone Посмотреть сообщение
открой для себя псевдотаблицу inserted и именно её используй в триггере.
Вот так? Только почему-то ошибку выдает "НЕОДНОЗНАЧНОЕ имя столбца Premia и IDDoctor(в конце который)"
SQL
1
2
3
4
 SELECT @Premia=Premia
     FROM Doctor AS d INNER JOIN Inserted AS i
     ON d.IDDoctor=i.IDDoctor
     WHERE IDDoctor = (SELECT IDDoctor FROM inserted)
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
10.01.2016, 01:43
Лучший ответ Сообщение было отмечено Alex13889 как решение

Решение

Цитата Сообщение от Alex13889 Посмотреть сообщение
Но мне то нельзя без триггера делать это задание. ТРИГГЕР обязателен!
Сказал что не надо .... Но раз вы хотите что вычисляемый поля делали через триггер ... Ну пожалуйста , Вот вам пример
T-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
27
28
29
30
31
32
33
34
35
36
--drop table MyTable
create table MyTable(id int identity,
                     Name nvarchar(30),
                     countt int,
                     Price money ,
                     Summ money
                     constraint PK_Mytable primary key(id)
                     )
                     
 -- Создадим триггер для вычисляемые поля  
 -- При INSERT и при UPDATE будем countt * Price 
 -- и резултат на таблицу Mytable
 alter trigger TR_MyTable
 on Mytable 
 for insert, update
 as
 if exists (select * 
            from deleted D, inserted I
            where I.Summ is null
            or (I.countt<>D.countt OR I.Price<>D.Price )
            )
 
 begin
   update MyTable set Summ = (countt* Price)
 end;
 
 ---------------Проверяем как работаеть триггер
 insert into MyTable(Name, countt, Price)
 values (N'Пива', 10, 25),
        (N'Чай', 12, 20),
        (N'Пива', 9, 18)
 select * from MyTable
 ------Делаем UPDATE 
 update MyTable set countt=10 where id=17
 ---------и проверяем
  select * from MyTable
2
0 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 28
10.01.2016, 03:26  [ТС]
xxbesoxx, Ох!Спасибо Вам огромное! У меня получилось! На Вашем примере!!!!)))) Спасибо! Работает хорошо.
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
10.01.2016, 03:50
Цитата Сообщение от Alex13889 Посмотреть сообщение
xxbesoxx, Ох!Спасибо Вам огромное! У меня получилось! На Вашем примере!!!!))))
Пожалуйста , ради бога
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2016, 03:50
Помогаю со студенческими работами здесь

SetBkColor работает криво
Есть пэинтбокс. На нем вывожу надпись под углом. Все настройки по тексту работают прекрасно. Но вот с заливкой бэка какая-то ерунда. Если...

Appendrtitem криво работает
Есть doc as NotesDocument и есть код. Dim rtitem As NotesRichTextItem Set rtitem = New NotesRichTextItem(doc, &quot;Body1&quot; ) ...

Memcpy криво работает
Всем доброго дня. Вот столкнулся с проблемой связанной с работой процедуры memcpy. Дело в том что если её вызывать в функции то она...

Криво работает youtube.ru
в мозиле криво работает ютуб, отображается так, как будто запрещены все скрипты и нету css, т.е. гольный текст в столбик. а в других...

Функиця криво работает
не могу понять в чем дело она не выводит весь текст.Нужно чтоб фунцкия два раза вывела фразу Three blind mice и потом еще два раза See now...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Изучаю 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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru