Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL Задание  [new]
Rustam0712
Member

Откуда:
Сообщений: 3
Создать триггер, запрещающий пользователю иван добавить строки в таблицу карта, если в колонке город встречается москва.

Выручайте! Не знаю как((
18 фев 18, 11:19    [21199595]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
правильный проходящий.
Guest
Rustam0712,
открывается любой текстовый редактор и в нем набирается запрос на создание триггера, начинающийся со слов Create trigger. Далее написанный код отправляется любым доступным способом на исполнению серверу и вуа ля.
18 фев 18, 12:27    [21199671]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
либо показывайте ваше решение и задавайте конкретные вопросы
либо вам сюда: Студентам, желающим помощи
18 фев 18, 12:42    [21199681]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Rustam0712
Member

Откуда:
Сообщений: 3
creat trigger
on КАРТА
after insert
as
begin
if (select карта
from город
where


End
18 фев 18, 15:37    [21199898]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Rustam0712
Member

Откуда:
Сообщений: 3
Дедушка,вот мои достижения...не могу понять какое условие необходимо

creat trigger
on КАРТА
after insert
as
begin
if (select карта
from город
where


End
18 фев 18, 15:41    [21199905]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
Rustam0712,

т.к. вам нужно "триггер, запрещающий пользователю добавить строки в таблицу",
то вместо after insert нужно instead of
читать тут и тут
по первой ссылке обратите внимание на пример А (как на общее направление)

"select карта from город where" у вас [карта] это таблица, а [город] это колонка
напишите для начала просто селект выводящий 1 если в таблице уже есть город Москва читать про exists

"запрещающий пользователю иван" - тут несколько неопределённо, но для начала читать про current_user
18 фев 18, 16:13    [21199928]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Дедушка
Rustam0712,

т.к. вам нужно "триггер, запрещающий пользователю добавить строки в таблицу",
то вместо after insert нужно instead of
Зачем? Зачем лепить instead of там где он совсем не нужен?
20 фев 18, 23:33    [21206580]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Добрый Э - Эх
Guest
Mind
Дедушка
Rustam0712,

т.к. вам нужно "триггер, запрещающий пользователю добавить строки в таблицу",
то вместо after insert нужно instead of
Зачем? Зачем лепить instead of там где он совсем не нужен?
то, что человек изучает инструмент триггеров и получил вполне себе конкретное задание на закрепление пройденного материала - в твою голову не приходит?
21 фев 18, 07:14    [21206702]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Добрый Э - Эх
Mind
пропущено...
Зачем? Зачем лепить instead of там где он совсем не нужен?
то, что человек изучает инструмент триггеров и получил вполне себе конкретное задание на закрепление пройденного материала - в твою голову не приходит?


Конструирование триггеров INSTEAD OF
Главное преимущество триггеров INSTEAD OF в том, что они позволяют поддерживать обновления для таких представлений, которые обновлять невозможно. Чтобы представление на основе нескольких базовых таблиц поддерживало вставку, обновление и удаление данных в нескольких таблицах, следует использовать триггер INSTEAD OF. Другое преимущество триггера INSTEAD OF состоит в том, что он обеспечивает логику кода, при которой можно отвергать одни части пакета и принимать другие.

Триггер INSTEAD OF может выполнять следующие действия:

пропускать части пакета;

не обрабатывать часть пакета и сохранять строки с неполадками в журнале;

выполнять альтернативное действие в случае ошибки.
Что именно из вышеперечисленного нужно было человеку?

В следующий раз когда меня спросят как обновить поле A значением B где поле C = X я скажу что надо использовать курсор, а что, конеретное себе задание, пусть школяры поизучают.
21 фев 18, 21:52    [21209831]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
Mind,

смысл упираться и постить куски доки?
конкретное задание ТСа в первом посте, приведите свой вариант триггера, мы обсудим.
21 фев 18, 21:56    [21209840]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Дедушка
Mind,

смысл упираться и постить куски доки?
конкретное задание ТСа в первом посте, приведите свой вариант триггера, мы обсудим.


обсуди:
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]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
Jaffar,

т.е. вы предлагаете сначала вставить данные в таблицу (хотя задание НЕ вставлять)
потом сделать некую проверку
и если проверка не прошла откатить транзакцию
я вас правильно понял? :)

вопрос а если хитрый Петя в это время сделал селект с nolock?
22 фев 18, 09:54    [21210326]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Дедушка
вопрос а если хитрый Петя в это время сделал селект с nolock?

То хитрый Петя ССЗБ, ибо сказано, что READ UNCOMMITTED может приводить к грязному чтению, т.е. чтению строк, которых в базе не было и не будет (в закоммиченном виде, понятное дело).

Городить же instead of триггер для запрета вставки, с моей точки зрения, излишне, достаточно сделать постобработку с rollback при нарушении условий.
Я бы задумался об instead of только в том случае, если бы в постановке явно было написано, что ошибочные данные не должны быть доступны иным транзакциям, читающим в READ UNCOMMITTED, только тогда бы требовалась предобработка в instead of триггере.
22 фев 18, 10:15    [21210360]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Minamoto
Дедушка
вопрос а если хитрый Петя в это время сделал селект с nolock?

То хитрый Петя ССЗБ, ибо сказано, что READ UNCOMMITTED может приводить к грязному чтению, т.е. чтению строк, которых в базе не было и не будет (в закоммиченном виде, понятное дело).

Городить же instead of триггер для запрета вставки, с моей точки зрения, излишне, достаточно сделать постобработку с rollback при нарушении условий.
Я бы задумался об instead of только в том случае, если бы в постановке явно было написано, что ошибочные данные не должны быть доступны иным транзакциям, читающим в READ UNCOMMITTED, только тогда бы требовалась предобработка в instead of триггере.

Вставить, потом думать а можно ли было вставлять, это да решение, права кстати тоже есть в sql. Ну и вариант что вставить он может 1кк записей, а потом будем откатывать?
22 фев 18, 10:20    [21210377]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Зачем спорите
Guest
Minamoto,

Создать триггер, запрещающий пользователю иван добавить строки в таблицу карта, если в колонке город встречается москва.

Данный триггер AFTER не запрещает вставку, он откатывает транзакцию. Формально задание не выполнено, тк вставка была произведена.
22 фев 18, 10:30    [21210391]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Зачем спорите
Minamoto,

Создать триггер, запрещающий пользователю иван добавить строки в таблицу карта, если в колонке город встречается москва.

Данный триггер AFTER не запрещает вставку, он откатывает транзакцию. Формально задание не выполнено, тк вставка была произведена.

Я бы сказал, что это на усмотрение преподавателя, который будет проверять выполнение задания.
Один может сказать, что вставка завершена тогда, когда проведена операция изменения страниц, и тогда требуется instead of insert. Другой может сказать, что вставка завершена при завершении транзакции, содержащей операцию вставки, и тогда достаточно after insert.
Третий вообще сам не понимает различия в триггерах, и ему любая реализация подойдет.

С точки зрения реализации в реальной работе я чаще видел реализации с after insert - запрет на вставку в instead of ни разу не видел.

Какой преподаватель будет проверять работу (и какую реализацию выбрать) - знает только ТС, поэтому спорить, действительно, не о чем.
22 фев 18, 11:02    [21210491]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
Minamoto
Городить же instead of триггер для запрета вставки, с моей точки зрения, излишне, достаточно сделать постобработку с rollback при нарушении условий.
ещё один молодой и горячий в компанию к Jaffar... :)
и дело не в преподавателе, а в логике
впрочем, если вам ближе "гланды череж ж*пу", то кто я такой, чтобы...
22 фев 18, 12:05    [21210721]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
dies irae
Member

Откуда:
Сообщений: 78
Дедушка
Minamoto
Городить же instead of триггер для запрета вставки, с моей точки зрения, излишне, достаточно сделать постобработку с rollback при нарушении условий.
ещё один молодой и горячий в компанию к Jaffar... :)
и дело не в преподавателе, а в логике
впрочем, если вам ближе "гланды череж ж*пу", то кто я такой, чтобы...


и меня тогда запиши в молодые и горячие (хотя это, к сожалению, уже давно не так)
в данной задаче абсолютно не нужен instead триггер.
Кроме того, что на них существуют дополнительные ограничения, и того, что код будет длиннее, его придётся переписывать при добавлении/удалении полей в таблицу.
22 фев 18, 12:16    [21210743]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Дедушка
Minamoto
Городить же instead of триггер для запрета вставки, с моей точки зрения, излишне, достаточно сделать постобработку с rollback при нарушении условий.
ещё один молодой и горячий в компанию к Jaffar... :)
и дело не в преподавателе, а в логике
впрочем, если вам ближе "гланды череж ж*пу", то кто я такой, чтобы...
Если я молодой и горячий, то вы, по всей видимости, старый и холодный? :)

Я обычно начинаю работать строго по формальной логике тогда, когда нужно испортить взаимодействие с определенным человеком - "как написали, так и сделал, а то, что не работает - так это вы так написали". Когда нужно сделать, чтобы работало, нужно выяснять, какой результат в итоге должен получиться, и реализовать, исходя из требуемого результата, осознавая (по возможности) ограничения и особенности выбранного подхода.
22 фев 18, 12:29    [21210794]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Дедушка
Minamoto
Городить же instead of триггер для запрета вставки, с моей точки зрения, излишне, достаточно сделать постобработку с rollback при нарушении условий.
ещё один молодой и горячий в компанию к Jaffar... :)
и дело не в преподавателе, а в логике
впрочем, если вам ближе "гланды череж ж*пу", то кто я такой, чтобы...
Лепить на каждую таблицу INSTEAD OF это и есть гланды через ж*пу.

С тем что триггер это костыль надеюсь все согласны? А INSTEAD OF триггер это костыль в квадрате. Применяется обычно когда вас чем то не устраивает стандартная вставка в таблицу, а код поменять нельзя, например исходников приложения нет. Для банального же запрета вставки подошел бы обычный CHECK Constraints, но препод придумывал задание на проверку знаний триггеров.
26 фев 18, 21:42    [21220267]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Mind
Дедушка
пропущено...
ещё один молодой и горячий в компанию к Jaffar... :)
и дело не в преподавателе, а в логике
впрочем, если вам ближе "гланды череж ж*пу", то кто я такой, чтобы...
Лепить на каждую таблицу INSTEAD OF это и есть гланды через ж*пу.

С тем что триггер это костыль надеюсь все согласны? А INSTEAD OF триггер это костыль в квадрате. Применяется обычно когда вас чем то не устраивает стандартная вставка в таблицу, а код поменять нельзя, например исходников приложения нет. Для банального же запрета вставки подошел бы обычный CHECK Constraints, но препод придумывал задание на проверку знаний триггеров.
секста
о сектанты подтянулись
26 фев 18, 21:45    [21220270]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Зачем спорите
Данный триггер AFTER не запрещает вставку, он откатывает транзакцию. Формально задание не выполнено, тк вставка была произведена.
Так может рассуждать только человек не понимающий приципов работы транзакций.
Minamoto
Зачем спорите
Minamoto,

Создать триггер, запрещающий пользователю иван добавить строки в таблицу карта, если в колонке город встречается москва.

Данный триггер AFTER не запрещает вставку, он откатывает транзакцию. Формально задание не выполнено, тк вставка была произведена.

Я бы сказал, что это на усмотрение преподавателя, который будет проверять выполнение задания.
Какой преподаватель будет проверять работу (и какую реализацию выбрать) - знает только ТС, поэтому спорить, действительно, не о чем.
А еще задание ничего не говорит о случае если пользователь вставляет сразу две строки, где только одна не удовлетворяет условию, что должно произойти со второй? От ответа на этот вопрос по сути и будет зависеть какой триггер использовать.
26 фев 18, 21:48    [21220274]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3436
Зачем спорите
Minamoto,

Создать триггер, запрещающий пользователю иван добавить строки в таблицу карта, если в колонке город встречается москва.

Данный триггер AFTER не запрещает вставку, он откатывает транзакцию. Формально задание не выполнено, тк вставка была произведена.


в колонке - какой? вставляемой или такая запись уже есть в таблице?
Преподаватели - дятлы
27 фев 18, 10:43    [21221012]     Ответить | Цитировать Сообщить модератору
 Re: SQL Задание  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Все,

о чем спорите то - триггер есть, для сдачи лабы в универе по Базам Данных - этого достаточно.
Скорее всего даже препод не знает разницы между афтер и бефоре. - а вы тут меритесь точностью....
27 фев 18, 14:15    [21221954]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить