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

Откуда:
Сообщений: 16
Помогите кто может!
Такая проблема.
Есть две таблицы: Coops и Workers
Из первой таблицы столбец Surname ссылается на столбец Surname во второй (при помощи FOREIGN KEY).
Нужно написать триггер (или функцию), которsq при удалении Surname(Workers) в поле Surname(Coops) записывал NULL.

А смысл такой: Есть работник, он контролирует клетку. Если удалили работника, то клетка становится без контролера.
28 окт 09, 01:12    [7847217]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36814
И что не получается?
28 окт 09, 02:00    [7847275]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
И какая версия сервера?

P.S. Surname - текстовое поле? Если да, то нехорошо... Очень нехорошо!
28 окт 09, 09:09    [7847533]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
RAndrey
Member

Откуда:
Сообщений: 324
iap

P.S. Surname - текстовое поле? Если да, то нехорошо... Очень нехорошо!


+1
28 окт 09, 09:17    [7847567]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
Влом регистрироваться
Guest
Deadly_Crash,

Триггер не нужен: RTFM ALTER TABLE ... ADD CONSTRAINT ... ON DELETE SET NULL
28 окт 09, 09:23    [7847586]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
RAndrey
Member

Откуда:
Сообщений: 324
Deadly_Crash
Помогите кто может!
Такая проблема.
Есть две таблицы: Coops и Workers
Из первой таблицы столбец Surname ссылается на столбец Surname во второй (при помощи FOREIGN KEY).
Нужно написать триггер (или функцию), которsq при удалении Surname(Workers) в поле Surname(Coops) записывал NULL.

А смысл такой: Есть работник, он контролирует клетку. Если удалили работника, то клетка становится без контролера.


ЕМНИП, то, что Вам нужно, можно указать в свойствах relationship. Равно как и каскадное удаление во всех связанных таблицах.
28 окт 09, 09:24    [7847593]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Влом регистрироваться
Deadly_Crash,

Триггер не нужен: RTFM ALTER TABLE ... ADD CONSTRAINT ... ON DELETE SET NULL
Это только начиная с SQL2005
Откуда Вы узнали версию? На мой вопрос ведь так и не ответили.
28 окт 09, 09:32    [7847622]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
Влом регистрироваться
Guest
iap,

раз автор не привел версию, беру последнюю. Каков вопрос, таков ответ :)
28 окт 09, 09:38    [7847642]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
Deadly_Crash
Member

Откуда:
Сообщений: 16
MS SQL SERVER 2005.
А кто может напистаь запрос, при котором бы происходило это удаление?

Т.е. если удалил строку С фамилией из одной таблицы, то в другой таблице где была эта фамилия - вместо нее записалось NULL?
28 окт 09, 16:47    [7851472]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Deadly_Crash
MS SQL SERVER 2005.
А кто может напистаь запрос, при котором бы происходило это удаление?

Т.е. если удалил строку С фамилией из одной таблицы, то в другой таблице где была эта фамилия - вместо нее записалось NULL?
CONSTRAINT [Имя] FOREIGN KEY(СписокПолей) REFERENCES [ИмяТаблицы](СписокПолей) ON DELETE SET NULL
28 окт 09, 16:50    [7851511]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
Deadly_Crash
Member

Откуда:
Сообщений: 16
Почему то не работает.
Может я что то не так пишу?

Есть таблица Workers.

Surname | Pay
Иванов И.И. | 2000

и есть таблица Coops

ID | Surname
1 | Иванов И.И.

Так вот, при получении запроса DELETE Workers WHERE Surname = 'Иванов И.И.'
нужно чтобы в поле Coops.Surname записалось NULL, а из таблицы Workers вообще удалилась эта строка.

P.S. Workers.Surname - Primary key
Coops.Surname - Foreign key на Workers.Surname
28 окт 09, 17:02    [7851629]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
Glory
Member

Откуда:
Сообщений: 104760
Deadly_Crash
Почему то не работает.
Может я что то не так пишу?


И можно увидеть, что и где вы пишите ?
28 окт 09, 17:03    [7851636]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
Deadly_Crash
Member

Откуда:
Сообщений: 16
К базе данных создаю запрос

CONSTRAINT Workers FOREIGN KEY (Surname, Pay) REFERENCES Coops(Surname) ON DELETE SET NULL
28 окт 09, 17:06    [7851661]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Может, в Workers есть ещё какой-нибудь 'Иванов И.И.', но записанный с двумя пробелами или с английской, а не русской буквой "о" и т.п.?
А Вы удаляете строку, на которую ничего и не ссылается!

Я ж говорил, что строковый ключ - это отстой!
28 окт 09, 17:07    [7851671]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
Glory
Member

Откуда:
Сообщений: 104760
Deadly_Crash
К базе данных создаю запрос

CONSTRAINT Workers FOREIGN KEY (Surname, Pay) REFERENCES Coops(Surname) ON DELETE SET NULL

Вообще то это не запрос. Это часть команды CREATE/ALTER TABLE. Которая создает отношение между двумя таблицами с возможностью автомтических каскадных операций
Не хотите открыть в хелпе статью про CREATE/ALTER TABLE ?
28 окт 09, 17:08    [7851682]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Deadly_Crash
К базе данных создаю запрос

CONSTRAINT Workers FOREIGN KEY (Surname, Pay) REFERENCES Coops(Surname) ON DELETE SET NULL
То есть, Вам удалось создать FOREIGN KEY с двумя полями, который ссылается на одно поле?
28 окт 09, 17:09    [7851684]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
Deadly_Crash
Member

Откуда:
Сообщений: 16
Нет. Иванов И.И. в единственном экземпляре.
Что то ей не нравится в CONSTRAINT.

А что можно еще сделать?
28 окт 09, 17:09    [7851685]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
Deadly_Crash
Member

Откуда:
Сообщений: 16
Может ввести поле ID_Worker

И в таблице Coops вместо Surname поставитm ID_Worker?
28 окт 09, 17:10    [7851689]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Deadly_Crash
Может ввести поле ID_Worker

И в таблице Coops вместо Surname поставитm ID_Worker?
А может, просто написать правильную команду, а не её часть?
28 окт 09, 17:11    [7851710]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
Deadly_Crash
Member

Откуда:
Сообщений: 16
Не подскажете?
Просто я такой запрос никогда не делал. Поэтому затрудняюсь?
28 окт 09, 17:13    [7851719]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
Glory
Member

Откуда:
Сообщений: 104760
Deadly_Crash
Не подскажете?
Просто я такой запрос никогда не делал. Поэтому затрудняюсь?

http://msdn.microsoft.com/ru-ru/library/ms190273%28SQL.90%29.aspx
28 окт 09, 17:14    [7851734]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
Deadly_Crash
Member

Откуда:
Сообщений: 16
Спасибо. Попробую разобраться. Позже скажу смог или нет. =)
28 окт 09, 17:18    [7851753]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
Deadly_Crash
Member

Откуда:
Сообщений: 16
Ничего хорошего не могу составить для своего случая! =(

Никто не сможет написать этот запрос? Буду очень благодарен!
28 окт 09, 18:56    [7852267]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
^^
Guest
Приведите скрипты СОЗДАНИЯ связанных таблиц, их и нужно подправить что бы у вас все заработало так как вы хотите
28 окт 09, 20:02    [7852423]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с написанием триггера  [new]
Deadly_Crash
Member

Откуда:
Сообщений: 16
Ура! Заработало! Я сделал!
28 окт 09, 20:03    [7852427]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить