Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-更新、插入或替换触发器?_Sql_Sql Server 2008_Triggers - Fatal编程技术网

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。