触发器:无法在条件内引用插入的表列值

问题描述 投票:0回答:1

我有以下触发器:

    GO
ALTER TRIGGER [dbo].[FooTrigger]
ON [dbo].[Foo]
FOR INSERT
AS 
DECLARE @Url nvarchar(MAX)
SELECT @Url  = ins.Url from INSERTED ins;

IF EXISTS (SELECT *  
           FROM [dbo].[Foo]  p   
           where p.Url =  @Url)  
BEGIN  
RAISERROR ( 'error %s' , 16, 1, @Url)
ROLLBACK TRANSACTION;  
RETURN   
END;
PRINT 'Executed Trigger Insert.'
GO

如果我像这样对条件进行硬编码,它将毫无问题地工作>>

IF EXISTS(SELECT * FROM [dbo].[Foo] foo WHERE foo.Url = 'test.com')

但是原始版本不起作用。它引发消息:

似乎在条件内使用@Url引用插入的表数据时出错。但是RAISERROR ( @Url , 16, 1);可以正确打印该值,因此我认为在条件内部不允许以某种方式引用。有任何解决方法吗?

我有以下触发器:GO ALTER TRIGGER [dbo]。[FooTrigger] ON [dbo]。[Foo]进行声明时插入@Url nvarchar(MAX)SELECT @Url = ins.INSERTED ins中的URL;如果存在(选择* ...

sql sql-server database-trigger
1个回答
1
投票

首先,如果您要确保url是唯一的,请使用唯一约束:

© www.soinside.com 2019 - 2024. All rights reserved.