SQL-更新、插入或替换触发器?
在更新或向表中的某个字段插入值时,我希望检查该值是否不包含一些字符。如果是,请不要插入任何内容。 我做了这个“而不是”触发器,但它只对插入的行有效,对更新的行无效。我做错了什么?我是否为此任务选择了正确的触发器SQL-更新、插入或替换触发器?,sql,sql-server-2008,triggers,Sql,Sql Server 2008,Triggers,在更新或向表中的某个字段插入值时,我希望检查该值是否不包含一些字符。如果是,请不要插入任何内容。 我做了这个“而不是”触发器,但它只对插入的行有效,对更新的行无效。我做错了什么?我是否为此任务选择了正确的触发器 ALTER TRIGGER trg_MakeSureOfCleanDescription ON [dbo].[Car] instead OF INSERT AS BEGIN DECLARE @CharPosition_Inserted INT; SET @C
ALTER TRIGGER trg_MakeSureOfCleanDescription
ON [dbo].[Car]
instead OF INSERT
AS
BEGIN
DECLARE @CharPosition_Inserted INT;
SET @CharPosition_Inserted = 0;
DECLARE @CharPosition_Updated INT;
SET @CharPosition_Updated = 0;
SELECT @CharPosition_Inserted = CHARINDEX('<', inserted.Description)
FROM inserted
--select @CharPosition_Updated = CHARINDEX('<', inserted.Description) from
IF( @CharPosition_Inserted = 0/*and @CharPosition_Updated = 0*/ )--only if the description is html free, insert it. Otherwise don't insert nothing.
BEGIN
PRINT 'no html. inserting.'
INSERT INTO Car
([Year],
[Make],
[Model],
[Price],
[ExtColor],
[IntColor],
[Body],
[Engine],
[Transmission],
[Miles],
[VIN],
[Description],
[MainImage],
[VideoFile],
[StockNumber],
[Sold])
SELECT [Year],
[Make],
[Model],
[Price],
[ExtColor],
[IntColor],
[Body],
[Engine],
[Transmission],
[Miles],
[VIN],
[Description],
[MainImage],
[VideoFile],
[StockNumber],
[Sold]
FROM inserted
END
END
ALTER TRIGGER trg\u清除描述
在[dbo].[Car]上
而不是插入
像
开始
声明@CharPosition\u插入INT;
设置@CharPosition\u Inserted=0;
声明@CharPosition\u更新的INT;
设置@CharPosition\u Updated=0;
选择@CharPosition\u Inserted=CHARINDEX(“您只检查插入操作。更新的处理方式完全不同,必须在单独的触发器中处理。由于插入有前后触发器,因此更新和删除也有前后触发器。在您的情况下,您需要为更新场景创建另一个触发器
(1)表的定义是什么-包括主键?(2)您的触发器在多行插入时无法正常工作(3)您只将其定义为,而不是insert
,它确实有一个主键,RDBMS是用于哪个的?触发器之类的东西是高度特定于供应商的-请添加一个标记,以指定您是使用mysql
、postgresql
、sql server
、oracle
还是db2
,或者完全其他的东西。这是sql server 2008。