2015-04-05 18 views
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 

謝謝。我的代碼:

+0

(1)表的定義是什麼 - 包括主鍵? (2)對於多行插入,您的觸發器將無法正常工作(3)您只將其定義爲'而不是插入' – 2015-04-05 17:54:49

+0

它確實有一個主鍵, – 2015-04-05 17:55:42

+0

這是哪種RDBMS的用途?觸發器之類的東西非常***特定於供應商的 - 請添加一個標籤以指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 其他完全。 – 2015-04-05 18:00:46

回答