Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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
Mysql 具有现有表的SQL触发器_Mysql_Sql_Triggers - Fatal编程技术网

Mysql 具有现有表的SQL触发器

Mysql 具有现有表的SQL触发器,mysql,sql,triggers,Mysql,Sql,Triggers,我有一个触发器的SQL问题,我无法解决,我想为我的数据库做一个坏字过滤器。我做了一个很好用的触发器: USE dbi353348 GO Create TRIGGER trChangeAbusiveWordzondertable ON Post AFTER INSERT AS DECLARE @Posttekst varchar(300); DECLARE @AccountID int; DECLARE @PostID int; SELECT @Posttek

我有一个触发器的SQL问题,我无法解决,我想为我的数据库做一个坏字过滤器。我做了一个很好用的触发器:

USE dbi353348
GO 

Create TRIGGER trChangeAbusiveWordzondertable
ON Post
AFTER INSERT
AS

    DECLARE @Posttekst varchar(300);
    DECLARE @AccountID int;
    DECLARE @PostID int;
    SELECT @Posttekst=i.Post FROM inserted i;
    SELECT @AccountID=i.Account_ID FROM inserted i;
    SELECT @PostID=i.Post_ID FROM inserted i;
BEGIN

DECLARE @AbusiveWords TABLE(ID INT,Word VARCHAR(10))
INSERT INTO @AbusiveWords (ID,Word) values (1,'kanker'),(2,'tyfus'),(3,'tering'),(4,'kut'),(5,'lul'),(6,'eikel'),(7,'klootzak'),(8,'hoer'),(9,'flikker'),(10,'mongool'),(11,'slet'),(12,'bitch');

UPDATE @AbusiveWords
SET @Posttekst=REPLACE(@Posttekst,Word,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(Word,'A','#'),'E','%'),'I','$'),'O','*'),'U','@')) 

UPDATE Post
SET Post = @Posttekst
WHERE Post_ID = @PostID

END
现在,我想从现有的表中选择坏单词,从我的数据库中选择“滥用单词”。已创建此触发器,但不会更改任何内容:

Use dbi353348
GO 

Create TRIGGER trChangeAbusiveWord
ON Post
AFTER INSERT
AS

    DECLARE @Posttekst varchar(300);
    DECLARE @AccountID int;
    DECLARE @PostID int;
    SELECT @Posttekst=i.Post FROM inserted i;
    SELECT @AccountID=i.Account_ID FROM inserted i;
    SELECT @PostID=i.Post_ID FROM inserted i;
BEGIN


UPDATE AbusiveWords
SET @Posttekst=REPLACE(@Posttekst,Word,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(Word,'A','#'),'E','%'),'I','$'),'O','*'),'U','@')) 

UPDATE Post
SET Post = @Posttekst
WHERE Post_ID = @PostID

END

我确认错误在update语句中的某个地方

关于更新@Posttekst的问题,该字段应该在哪里

UPDATE AbusiveWords
SET WORD=REPLACE(@Posttekst,Word,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(Word,'A','#'),'E','%'),'I','$'),'O','*'),'U','@')) 

应该更新WORD,而不是一个变量@postteskt,它会将AbusiveWords表中的所有单词强制更改为插入的单词,并且不会更改另一个Post表中的坏单词。我是否遗漏了什么?这只是为了强调更新问题。所以,问题是,为什么需要更新AbusiveWords表?我需要更改插入的坏单词中的一些字符,以便以后可以在另一个表中更改它们,并在更新时“发布”。有了一个临时表,我可以很容易地做到这一点,但是我不能将单词添加到坏单词过滤器中。我认为这是错误的做法