我有以下触发器:
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;如果存在(选择* ...
首先,如果您要确保url
是唯一的,请使用唯一约束: