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