我有一个包含几列的数据库FOO,其中我有一列“ Url”。我需要在插入/更新之前编写一个触发器,该触发器将检查Url列是否较新的值与任何现有值匹配,即“ hello”,除了一些预定义的值。这意味着如果多次插入或更新“ hello”,将不会发生错误,否则将检查是否重复。如果发现某些异常,则中止插入更新。这还将返回一些代码,以便我的调用插入/更新的脚本将知道发生了故障。我知道可能还有其他解决方法,但我将需要采用这种方式。我对SQL还是很陌生。
Foo{
Url
}
这里是算法
Before update insert
if new value of Url is not "hello1" o "hello 2"
check if new value of Url already exists in Foo.Url if so abort otherwise allow update/insert
return something if aborted/success
唯一约束不会满足您的要求,但是您可以创建一个内容类似于以下内容的触发器,而不是触发它:
Create TRIGGER [dbo].[Trig_Insert_XXX]
ON [dbo].[XXX]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @keysRequired INT, @current INT;
INSERT INTO xxx ([url], field1, field2, fieldN)
SELECT [url], field1, field2, fieldN
FROM inserted i
WHERE i.url = 'hello' OR NOT EXISTS (SELECT * FROM xxx t2 WHERE t2.url = i.url);
END;