Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2014, 09:06   #1
<Валюшка>
 
Регистрация: 26.11.2011
Сообщений: 4
По умолчанию создание триггера в sql server

помогите пожалуйста с триггером, ничего не получается
создать триггер, который при вводе новой записи о сеансе проверял бы, существует ли заданный код кинофильма в списке кинофильмов и код категории кинофильма - в списке категорий. если отсутствует заданные код кинофильма или категория необходимо откатить транзакцию и выдать сообщение
<Валюшка> вне форума Ответить с цитированием
Старый 02.11.2014, 09:53   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Это можно и без триггера, сделав соответствующие коды внешними ключами
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.11.2014, 10:17   #3
<Валюшка>
 
Регистрация: 26.11.2011
Сообщений: 4
По умолчанию

но нам задали именно с помощью триггеров сделать, а как их делать понять не могу
<Валюшка> вне форума Ответить с цитированием
Старый 02.11.2014, 10:32   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

http://msdn.microsoft.com/ru-ru/library/ms189799.aspx
Отличный пример в главе В.Использование триггера DML AFTER для принудительного применения бизнес-правил между таблицами PurchaseOrderHeader и Vendor
И с проверкой и с откатом транзакции. Попробуй под себя перестрой.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2014, 10:37   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну что-то в этом духе
Код:
create trigger MyTrigger on MyTable for INSERT as
begin
  declare  @errno   int,
           @errmsg  varchar(255),
           @Number int

  select @Number=COUNT(*)
    from Inserted I
    where NOT EXISTS(SELECT 1 FROM Кинофильмы C WHERE C.Id=I.IdFilm)
  if @Number>0 begin
    select @errno  = 13001
    select @errmsg = 'Не все коды фильмов корректны'
    goto error
  end

  select @Number=COUNT(*)
    from Inserted I
    where NOT EXISTS(SELECT 1 FROM Категории C WHERE C.Id=I.IdCatg)
  if @Number>0 begin
    select @errno  = 13002
    select @errmsg = 'Не все коды категорий корректны'
    goto error
  end

  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.11.2014, 11:43   #6
<Валюшка>
 
Регистрация: 26.11.2011
Сообщений: 4
По умолчанию

спасибо большое, но я понять не могу что это за таблица from Inserted I
<Валюшка> вне форума Ответить с цитированием
Старый 02.11.2014, 12:26   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

По ссылке от Stilet почитай и все ясно будет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.11.2014, 12:26   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это если не ошибаюсь не просто таблица а "указатель" на данные, которые вставляются. Ну т.е. из запроса insert into бла-бла данные попадают сначала в транзакцию, на которую Inserted и указывает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание локальной базы данных в среде My SQL Server Aristarx Помощь студентам 1 25.05.2013 10:54
Создание локальной базы данных в среде My SQL Server Aristarx PHP 1 25.05.2013 01:39
Создание триггера RuVarez БД в Delphi 1 19.10.2011 20:35
Создание триггера Crasty SQL, базы данных 1 20.11.2009 01:19
Создание базы в MS SQL Server 2005 badfilin SQL, базы данных 2 27.02.2009 07:50