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

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

09.01.2016, 04:41. Показов 1573. Ответов 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,602
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,602
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,602
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,602
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
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru