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

Откуда:
Сообщений: 970
Доброго времени суток.

Уважаемые, можно ли как то решить задачу каскадного апдейта FK и еще одного поля, в случае удаления PK?

Пример
Param (id int)
Value (param_id int, group int)


Связь между id и param_id.
При удалении id - нужно не только выставить в NULL соотв param_id (что 2008 скуль позволяет при создании отношения), но и в group проставить -1.

Пример упрощен для решения конкретно этой задачи.

Благодарю.
23 окт 13, 18:09    [15022516]     Ответить | Цитировать Сообщить модератору
 Re: Отношения между таблицами и каскадное удаление/апдейт  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
group поддерживать триггером.
23 окт 13, 18:11    [15022524]     Ответить | Цитировать Сообщить модератору
 Re: Отношения между таблицами и каскадное удаление/апдейт  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
Гавриленко Сергей Алексеевич
group поддерживать триггером.
а если без триггера? Никак?
23 окт 13, 18:40    [15022673]     Ответить | Цитировать Сообщить модератору
 Re: Отношения между таблицами и каскадное удаление/апдейт  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
_Промешан_
а если без триггера? Никак?
Param (id int)
Value (param_id int, group int, effective_group as param_id is not null then group_id else -1 end)
23 окт 13, 18:59    [15022775]     Ответить | Цитировать Сообщить модератору
 Re: Отношения между таблицами и каскадное удаление/апдейт  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
invm
_Промешан_
а если без триггера? Никак?
Param (id int)
Value (param_id int, group int, effective_group as param_id is not null then group_id else -1 end)
Если копать дальше с тем же подходом, то можно удалять записи нафег, а соответствующем запросе написать IsNull, точнее CASE и не парить мозги.
24 окт 13, 01:17    [15023728]     Ответить | Цитировать Сообщить модератору
 Re: Отношения между таблицами и каскадное удаление/апдейт  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
Mnior
invm
пропущено...
Param (id int)
Value (param_id int, group int, effective_group as param_id is not null then group_id else -1 end)
Если копать дальше с тем же подходом, то можно удалять записи нафег, а соответствующем запросе написать IsNull, точнее CASE и не парить мозги.
Ух ты. Што сие есть такое?
Надо срочненько запробовать.
24 окт 13, 13:55    [15026368]     Ответить | Цитировать Сообщить модератору
 Re: Отношения между таблицами и каскадное удаление/апдейт  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
Mnior
invm
пропущено...
Param (id int)
Value (param_id int, group int, effective_group as param_id is not null then group_id else -1 end)
Если копать дальше с тем же подходом, то можно удалять записи нафег, а соответствующем запросе написать IsNull, точнее CASE и не парить мозги.
Касательно запросов - таких много мест, сложно, хотя и более верно.
24 окт 13, 15:46    [15027259]     Ответить | Цитировать Сообщить модератору
 Re: Отношения между таблицами и каскадное удаление/апдейт  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
invm
_Промешан_
а если без триггера? Никак?
Param (id int)
Value (param_id int, group int, effective_group as param_id is not null then group_id else -1 end)
"effective_group as param_id is not null then group_id else -1 end" - это и на апдейт будет работать?
24 окт 13, 15:48    [15027273]     Ответить | Цитировать Сообщить модератору
 Re: Отношения между таблицами и каскадное удаление/апдейт  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
_Промешан_
invm
пропущено...
Param (id int)
Value (param_id int, group int, effective_group as param_id is not null then group_id else -1 end)
"effective_group as param_id is not null then group_id else -1 end" - это и на апдейт будет работать?
Это ж вычисляемое поле!
Вычисляется при каждом SELECTе.
Само-то по себе оно read only, апдейтиться, естественно, не может.
24 окт 13, 16:26    [15027506]     Ответить | Цитировать Сообщить модератору
 Re: Отношения между таблицами и каскадное удаление/апдейт  [new]
Гость333
Member

Откуда:
Сообщений: 3683
_Промешан_
invm
пропущено...
Param (id int)
Value (param_id int, group int, effective_group as case when param_id is not null then group_id else -1 end)
"effective_group as param_id is not null then group_id else -1 end" - это и на апдейт будет работать?

На всякий случай, там кое-что пропущено, выделил цветом.
24 окт 13, 17:55    [15028070]     Ответить | Цитировать Сообщить модератору
 Re: Отношения между таблицами и каскадное удаление/апдейт  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
iap
_Промешан_
пропущено...
"effective_group as param_id is not null then group_id else -1 end" - это и на апдейт будет работать?
Это ж вычисляемое поле!
Вычисляется при каждом SELECTе.
Само-то по себе оно read only, апдейтиться, естественно, не может.

Да, но меня интересует апдейт поля group как бы, а не просто вычисление. Или это для случаев с поправкой в инициирующих запросах, а не по факту в отношениях?
25 окт 13, 16:58    [15033401]     Ответить | Цитировать Сообщить модератору
 Re: Отношения между таблицами и каскадное удаление/апдейт  [new]
Гость333
Member

Откуда:
Сообщений: 3683
_Промешан_,

Если вы измените значение поля group, то заодно автоматически изменится значение поля effective_group, в соответствии с заданной формулой. Напрямую апдейтить effective_group нельзя.
25 окт 13, 17:09    [15033479]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить