MSSQL:在使用触发器插入/更新之前检查某些列的特定值

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

我有一个包含几列的数据库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
sql sql-server database database-trigger
1个回答
0
投票

唯一约束不会满足您的要求,但是您可以创建一个内容类似于以下内容的触发器,而不是触发它:

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;
© www.soinside.com 2019 - 2024. All rights reserved.