0
如果更新或插入值到我的表中的字段之一,我想检查该值不包含一些字符。如果是这样,不要插入任何东西。 我这样做“而不是”触发器,但它只适用于插入的行,而不适用于更新的行。我做错了什么?我为这项任务选择了正确的触发器吗?SQL - 更新,插入或替代触发器?
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
谢谢。我的代码:
(1)表的定义是什么 - 包括主键? (2)对于多行插入,您的触发器将无法正常工作(3)您只将其定义为'而不是插入' – 2015-04-05 17:54:49
它确实有一个主键, – 2015-04-05 17:55:42
这是哪种RDBMS的用途?触发器之类的东西非常***特定于供应商的 - 请添加一个标签以指定您是使用'mysql','postgresql','sql-server','oracle'还是'db2' - 其他完全。 – 2015-04-05 18:00:46