簡體   English   中英

SQL-更新,插入還是代替觸發器?

[英]SQL - Update, Insert Or Instead of Trigger?

如果將值更新或插入表中的字段之一,我想檢查該值是否不包含某些字符。 如果是這樣,請勿插入任何內容。 我做了這個“代替”觸發器, 但它僅適用於插入的行,不適用於更新的行 我做錯了什么? 我是否為此任務選擇了合適的觸發器?

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 

謝謝。

我的代碼:

您僅在檢查插入操作。 更新的處理方式完全不同,必須在單獨的觸發器中進行處理。 由於存在用於插入的Before和After觸發器,因此也存在用於Update和Delete的Before和After觸發器。 在您的情況下,您需要為更新方案創建另一個觸發器。

https://technet.microsoft.com/zh-cn/library/ms188601%28v=sql.105%29.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM