|
207 / 23 / 6
Регистрация: 12.06.2012
Сообщений: 235
|
|||||||||||||||||||||
Ребят, подскажите как сделать триггер?17.03.2017, 10:59. Показов 4044. Ответов 24
Необходим триггер для SQL server.
Суть вопроса: Есть таблица Workflow с полями PID(int not Null), SID(int not Null), Country(nvarchar 255), Date(datetime). PID и SID это уникальный ключ. Присутствуют такие данные: 3426, 85, Poland, '2017-03-02'В этой таблице записи постоянно удаляются, обновляются и вставляются новые. Если запись удаляется (DELETE), или, изменяется поле Country (UPDATE), то надо, чтобы в таблицу History попадала запись. Но перед этим сверялось по трём полям (PID, SID, Country) нет ли там уже такой схожей записи, чтобы не плодить дубликат. Пример 1: Удаляем записи из таблицы Workflow скриптом:
По второму Delete аналогично проверяем. Пример 2: Обновляем записи в таблице Workflow скриптом:
П.С. Сравнение по полю Country надо производить без учета регистра, т.е. 'poland' = 'Poland' = 'POLAND'. Интересует, куда надо вносить скрипт, я так понимаю в раздел Triggers. Ну и сам T-SQL синтаксис верный, потому что я набросал от руки, явно не правильный.
0
|
|||||||||||||||||||||
| 17.03.2017, 10:59 | |
|
Ответы с готовыми решениями:
24
Ребят дайте свой мудрый совет . Подскажите что можно сделать? Жить ему или нет? Ребят, подскажите как фиксится ошибка |
|
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
|
||||||
| 18.03.2017, 21:03 | ||||||
Сообщение было отмечено sergeos как решение
Решение
Во-первых, добавлю поле Action (упустил
)
Если написать DELETE [dbo].[Workflow] WHERE 2*2=5;, то ничего не удалится, но триггер вызовется! Что же, делать холостой INSERT нуля записей в [dbo].[WorkflowHistory]?? В-третьих, можете спросить, зачем я проверяю наличие записей в deleted, если можно, казалось бы, просто проверять @@ROWCOUNT на равенство 0? Отвечаю: если DELETE выполнится в инструкции MERGE, то в триггере на удаление @@ROWCOUNT совсем необязательно равно количеству удалённых записей. @@ROWCOUNT будет равен общему количеству записей, затронутых командой MERGE. А это может быть ещё и INSERT, и UPDATE.
1
|
||||||
|
207 / 23 / 6
Регистрация: 12.06.2012
Сообщений: 235
|
|||||||
| 18.03.2017, 21:32 [ТС] | |||||||
![]() да, конечно, важно видеть какие возможности SQL можно использовать, но и основую задачу сделать, чтобы видеть эволюцию стран за период. Пока что не красиво выглядит дубликация стран. Вот тот последний вопрос относится к сложным, то что я спрашивал как усложнить Exists, чтобы вставлять запись в History, только если последняя добавленная не такая же как добавляемая? Т.е., логически понимая, надо ещё делать такой запрос:
0
|
|||||||
|
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
|
||||||||||||||||||||||||||||||||||||||
| 19.03.2017, 03:42 | ||||||||||||||||||||||||||||||||||||||
|
Придется вернуться, т.к. триггер iap пытается добавить кучу мусора
тестовый скрипт. Выполнять построчно, иначе у операций может оказаться одинаковое GetDate() и будет неправильно определено последнее изменение. Поэтому лучше добавить автоинкрементное поле в HISTORY для одинакового определения последнеего изменения Кликните здесь для просмотра всего текста
delete from history
INSERT INTO dbo.Workflow(PID, SID, Country) SELECT 3426, 85, NULL UPDATE dbo.Workflow SET Country = 'pOland' WHERE PID = 3426 AND SID = 85 UPDATE dbo.Workflow SET Country = 'Poland' WHERE PID = 3426 AND SID = 85 UPDATE dbo.Workflow SET Country = ' Poland' WHERE PID = 3426 AND SID = 85 UPDATE dbo.Workflow SET Country = 'Poland ' WHERE PID = 3426 AND SID = 85 UPDATE dbo.Workflow SET Date = '20170102' WHERE PID = 3426 AND SID = 85 UPDATE dbo.Workflow SET Country = 'Pakistan' WHERE PID = 3426 AND SID = 85 UPDATE dbo.Workflow SET Country = ' ' WHERE PID = 3426 AND SID = 85 UPDATE dbo.Workflow SET Country = 'Pakistan' WHERE PID = 3426 AND SID = 85 UPDATE dbo.Workflow SET Country = ' ' WHERE PID = 3426 AND SID = 85 UPDATE dbo.Workflow SET Country = 'Pakistan' WHERE PID = 0 DELETE FROM dbo.Workflow WHERE PID = 3426 AND SID = 85 SELECT * FROM dbo.Workflow SELECT * FROM dbo.HISTORY у iap получим
у меня
1
|
||||||||||||||||||||||||||||||||||||||
|
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
|
||||||
| 19.03.2017, 12:41 | ||||||
1
|
||||||
|
207 / 23 / 6
Регистрация: 12.06.2012
Сообщений: 235
|
|
| 23.03.2017, 09:35 [ТС] | |
|
Только вот решил написать после тестинга.
ЛЮДИ А Г Р О М Н А Е СПАСИБО
0
|
|
| 23.03.2017, 09:35 | |
|
Ребят, подскажите как исправить ошибку... Ребят подскажите как вывести значение Ребят, подскажите, как отсеять лишнее Ребят, подскажите как написать скрипт?? ребят подскажите в формулой,как расписать ее правильно? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|