Должен ли я использовать вставленную таблицу в этом триггере, чтобы установить значение по умолчанию для внешнего ключа, допускающего значение NULL? - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть таблица с обнуляемым полем FK. Я сделал это nullablle, чтобы не менять загрузчик.

Чтобы достичь (Рекламодатели) * 1 (Валюты), я написал простой триггер:

ALTER TRIGGER InsertedAdvertisersDefaultCurrency
ON dbo.Advertisers
FOR INSERT
AS
    UPDATE Advertisers
    SET Currency_Id=(SELECT TOP 1 Id FROM Currencies WHERE Name='USD')
    WHERE Currency_Id=NULL

Мой вопрос в основном о том, как я проверяю всю таблицу на наличие пустых строк при каждой вставке.

Я чувствую, что должен использовать вставленную таблицу (?)

Вот таблица:

CREATE TABLE [dbo].[Advertisers](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](max) NOT NULL,
    [Currency_Id] [int] NULL,
 CONSTRAINT [PK_Advertisers] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Advertisers]  WITH CHECK ADD  CONSTRAINT [FK_CurrencyAdvertiser1] FOREIGN KEY([Currency_Id])
REFERENCES [dbo].[Currencies] ([Id])
GO
ALTER TABLE [dbo].[Advertisers] CHECK CONSTRAINT [FK_CurrencyAdvertiser1]
GO

1 Ответ

1 голос
/ 07 декабря 2011

Да, вы должны просто обновить записи insertd:

UPDATE Advertisers
SET Currency_Id=(SELECT TOP 1 Id FROM Currencies WHERE Name='USD')
WHERE Id in (select Id from inserted)

Или вы можете использовать значение по умолчанию в этом поле

ALTER TABLE [dbo].[Advertisers] ADD  CONSTRAINT [DF_Advertisers_Currency_Id]  DEFAULT ((101)) FOR [Currency_Id]
GO

Где 101 - идентификатор доллара США

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...