2011-12-07 4 views
0

私は、NULL可能なFKフィールドを持つテーブルを持っています。私はローダーを変更することを避けるためにそれを無効にしました。このトリガーで挿入されたテーブルを使用して、NULL可能な外部キーのデフォルト値を設定する必要がありますか?

(広告主)* 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

はい、あなただけの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はUSDのIDです

+0

私の元の引き金は私が期待したことさえしなかったので、それは大きな助けとなりました。 –

+0

ああ、私は '= null'を使用し、私は 'nullが使用されている必要がありますので、私のオリジナルは動作しなかったと思う...私はいつも間違いを犯すので、C#ほとんどの時間 –

関連する問題