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

Откуда: -)
Сообщений: 391
Всем привет. Помогите решить проблему ибо нуб.

У меня есть таблица, у которой есть поле с форинг кеем и с разрешенным NULL. И дело в том что в эту поле иногда приходит значения не соответствующие id из форинг таблицы, и надо чтобы в этом случае поле оставалось NULL. Как это можно организовать?

Приведу пример на пальцах

CREATE TABLE [dbo].[Type](
[ID] [int] IDENTITY(1,1) NOT NULL,
[TypeName] [varchar](50) NOT NULL
);

create table dbo.Model
(
[Id] [int] IDENTITY(1,1) NOT NULL,
[Title] [nvarchar](max) NOT NULL,
[TypeID] [int] NULL,

CONSTRAINT [FK_Type] FOREIGN KEY([TypeID]) REFERENCES [dbo].[Type] ([ID])
);

Теперь когда у меня допустим приходит INSERT INTO Model VALUES("MyTitle", "-1") надо чтоб оно не ругалось на несогласие с форинг кеем а оставила NULL
5 авг 13, 23:56    [14666892]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с форинг кеем  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Instead of insert триггер. И то, я не уверен, что констрейнты чекаются после триггера.
6 авг 13, 00:29    [14666955]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с форинг кеем  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Гавриленко Сергей Алексеевич
И то, я не уверен, что констрейнты чекаются после триггера.
После.
http://msdn.microsoft.com/en-us/library/ms189261(v=sql.105).aspx
If constraints exist on the trigger table, they are checked after the INSTEAD OF trigger execution but prior to the AFTER trigger execution. If the constraints are violated, the INSTEAD OF trigger actions are rolled back and the AFTER trigger is not executed.
6 авг 13, 05:24    [14667139]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с форинг кеем  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
В тривиальном случае, приведенном в посте, никаких триггеров не надо:
INSERT INTO Model VALUES('$Title',NULLIF($id, -1))
6 авг 13, 06:17    [14667162]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с форинг кеем  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
гы... Синтаксис от MySQL
Но идея та же:)
6 авг 13, 06:20    [14667163]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с форинг кеем  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
mmar
надо чтоб оно не ругалось на несогласие с форинг кеем а оставила NULL
Для начало надо не путать RDBS с программным комплексом. Можно:
- просто обрабатывать ошибку и сделать альтернативное действие (TRY/CATCH)
- проверять самому заранее существование перед вставкой
И делать это можно не только на SQL по и на любом программном уровне - клиенте, апликейшн сервере.
6 авг 13, 10:36    [14667883]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить