Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我应该使用此触发器中插入的表为可为空的外键设置默认值吗?_Sql_Sql Server_Triggers - Fatal编程技术网

Sql 我应该使用此触发器中插入的表为可为空的外键设置默认值吗?

Sql 我应该使用此触发器中插入的表为可为空的外键设置默认值吗?,sql,sql-server,triggers,Sql,Sql Server,Triggers,我有一个带有可为空FK字段的表。我使其为空以避免更改加载程序 为了实现(广告商)*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 Curr

我有一个带有可为空FK字段的表。我使其为空以避免更改加载程序

为了实现(广告商)*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

是的,您应该只更新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是美元id

谢谢,这是一个很大的帮助,因为我原来的触发器甚至没有达到我预期的效果。哦,我认为我原来的触发器不起作用,因为我使用了“=null”,我应该使用“is null”。。。我总是犯错误,因为我大部分时间都在写c