Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Rustam0712 Member Откуда: Сообщений: 3 |
Создать триггер, запрещающий пользователю иван добавить строки в таблицу карта, если в колонке город встречается москва. Выручайте! Не знаю как(( |
18 фев 18, 11:19 [21199595] Ответить | Цитировать Сообщить модератору |
правильный проходящий.
Guest |
Rustam0712, открывается любой текстовый редактор и в нем набирается запрос на создание триггера, начинающийся со слов Create trigger. Далее написанный код отправляется любым доступным способом на исполнению серверу и вуа ля. |
18 фев 18, 12:27 [21199671] Ответить | Цитировать Сообщить модератору |
Дедушка Member Откуда: Город трёх революций Сообщений: 5114 |
либо показывайте ваше решение и задавайте конкретные вопросы либо вам сюда: Студентам, желающим помощи |
18 фев 18, 12:42 [21199681] Ответить | Цитировать Сообщить модератору |
Rustam0712 Member Откуда: Сообщений: 3 |
creat trigger on КАРТА after insert as begin if (select карта from город where End |
18 фев 18, 15:37 [21199898] Ответить | Цитировать Сообщить модератору |
Rustam0712 Member Откуда: Сообщений: 3 |
Дедушка,вот мои достижения...не могу понять какое условие необходимо creat trigger on КАРТА after insert as begin if (select карта from город where End |
18 фев 18, 15:41 [21199905] Ответить | Цитировать Сообщить модератору |
Дедушка Member Откуда: Город трёх революций Сообщений: 5114 |
Rustam0712, т.к. вам нужно "триггер, запрещающий пользователю добавить строки в таблицу", то вместо after insert нужно instead of читать тут и тут по первой ссылке обратите внимание на пример А (как на общее направление) "select карта from город where" у вас [карта] это таблица, а [город] это колонка напишите для начала просто селект выводящий 1 если в таблице уже есть город Москва читать про exists "запрещающий пользователю иван" - тут несколько неопределённо, но для начала читать про current_user |
18 фев 18, 16:13 [21199928] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
|
||
20 фев 18, 23:33 [21206580] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
|
||||
21 фев 18, 07:14 [21206702] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
В следующий раз когда меня спросят как обновить поле A значением B где поле C = X я скажу что надо использовать курсор, а что, конеретное себе задание, пусть школяры поизучают. |
||||||
21 фев 18, 21:52 [21209831] Ответить | Цитировать Сообщить модератору |
Дедушка Member Откуда: Город трёх революций Сообщений: 5114 |
Mind, смысл упираться и постить куски доки? конкретное задание ТСа в первом посте, приведите свой вариант триггера, мы обсудим. |
21 фев 18, 21:56 [21209840] Ответить | Цитировать Сообщить модератору |
Jaffar Member Откуда: Сообщений: 633 |
обсуди: create trigger t_Table_BI on t_TABLE after insert AS BEGIN if(suser_name() = 'Ivan' and exists(select 1 from inserted i where i.City like '%Москва%')) begin raiserror('Ваня тебе нельзя вставлять.', 1000, 1, 'aa') rollback tran return end END |
||
22 фев 18, 08:56 [21210224] Ответить | Цитировать Сообщить модератору |
Дедушка Member Откуда: Город трёх революций Сообщений: 5114 |
Jaffar, т.е. вы предлагаете сначала вставить данные в таблицу (хотя задание НЕ вставлять) потом сделать некую проверку и если проверка не прошла откатить транзакцию я вас правильно понял? :) вопрос а если хитрый Петя в это время сделал селект с nolock? |
22 фев 18, 09:54 [21210326] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
То хитрый Петя ССЗБ, ибо сказано, что READ UNCOMMITTED может приводить к грязному чтению, т.е. чтению строк, которых в базе не было и не будет (в закоммиченном виде, понятное дело). Городить же instead of триггер для запрета вставки, с моей точки зрения, излишне, достаточно сделать постобработку с rollback при нарушении условий. Я бы задумался об instead of только в том случае, если бы в постановке явно было написано, что ошибочные данные не должны быть доступны иным транзакциям, читающим в READ UNCOMMITTED, только тогда бы требовалась предобработка в instead of триггере. |
||
22 фев 18, 10:15 [21210360] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Вставить, потом думать а можно ли было вставлять, это да решение, права кстати тоже есть в sql. Ну и вариант что вставить он может 1кк записей, а потом будем откатывать? |
||||
22 фев 18, 10:20 [21210377] Ответить | Цитировать Сообщить модератору |
Зачем спорите
Guest |
Minamoto, Создать триггер, запрещающий пользователю иван добавить строки в таблицу карта, если в колонке город встречается москва. Данный триггер AFTER не запрещает вставку, он откатывает транзакцию. Формально задание не выполнено, тк вставка была произведена. |
22 фев 18, 10:30 [21210391] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
Я бы сказал, что это на усмотрение преподавателя, который будет проверять выполнение задания. Один может сказать, что вставка завершена тогда, когда проведена операция изменения страниц, и тогда требуется instead of insert. Другой может сказать, что вставка завершена при завершении транзакции, содержащей операцию вставки, и тогда достаточно after insert. Третий вообще сам не понимает различия в триггерах, и ему любая реализация подойдет. С точки зрения реализации в реальной работе я чаще видел реализации с after insert - запрет на вставку в instead of ни разу не видел. Какой преподаватель будет проверять работу (и какую реализацию выбрать) - знает только ТС, поэтому спорить, действительно, не о чем. |
||
22 фев 18, 11:02 [21210491] Ответить | Цитировать Сообщить модератору |
Дедушка Member Откуда: Город трёх революций Сообщений: 5114 |
и дело не в преподавателе, а в логике впрочем, если вам ближе "гланды череж ж*пу", то кто я такой, чтобы... |
||
22 фев 18, 12:05 [21210721] Ответить | Цитировать Сообщить модератору |
dies irae Member Откуда: Сообщений: 78 |
и меня тогда запиши в молодые и горячие (хотя это, к сожалению, уже давно не так) в данной задаче абсолютно не нужен instead триггер. Кроме того, что на них существуют дополнительные ограничения, и того, что код будет длиннее, его придётся переписывать при добавлении/удалении полей в таблицу. |
||||
22 фев 18, 12:16 [21210743] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
Я обычно начинаю работать строго по формальной логике тогда, когда нужно испортить взаимодействие с определенным человеком - "как написали, так и сделал, а то, что не работает - так это вы так написали". Когда нужно сделать, чтобы работало, нужно выяснять, какой результат в итоге должен получиться, и реализовать, исходя из требуемого результата, осознавая (по возможности) ограничения и особенности выбранного подхода. |
||||
22 фев 18, 12:29 [21210794] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
С тем что триггер это костыль надеюсь все согласны? А INSTEAD OF триггер это костыль в квадрате. Применяется обычно когда вас чем то не устраивает стандартная вставка в таблицу, а код поменять нельзя, например исходников приложения нет. Для банального же запрета вставки подошел бы обычный CHECK Constraints, но препод придумывал задание на проверку знаний триггеров. |
||||
26 фев 18, 21:42 [21220267] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
о сектанты подтянулись |
||||
26 фев 18, 21:45 [21220270] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
|
||||||
26 фев 18, 21:48 [21220274] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3963 |
в колонке - какой? вставляемой или такая запись уже есть в таблице? Преподаватели - дятлы |
||
27 фев 18, 10:43 [21221012] Ответить | Цитировать Сообщить модератору |
Jaffar Member Откуда: Сообщений: 633 |
Все, о чем спорите то - триггер есть, для сдачи лабы в универе по Базам Данных - этого достаточно. Скорее всего даже препод не знает разницы между афтер и бефоре. - а вы тут меритесь точностью.... |
27 фев 18, 14:15 [21221954] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |