当我插入一条评论时,如果他们是发誓的单词,我想替换句子中的元音。 我有一个发誓词的表。 (我现在只有2个表中的话,但会有更多的稍后添加)SQL替换函数不起作用
我有一个表BADWORDS这样的:
Word
----------
Luke
father
----------
现在,当我插入“卢克,我是你爸爸”我希望它返回'Lk-,我是你的F-th-r'
这就是我所得到的。但它不能取代任何东西。
CREATE TRIGGER replace_badWords ON comment
INSTEAD OF INSERT
AS
DECLARE @word AS NVARCHAR(50);
DECLARE @wordCursor AS CURSOR;
DECLARE @text VARCHAR(500) = (SELECT I.messageText FROM inserted I)
SET @wordCursor = CURSOR FOR
SELECT word FROM Badwords;
OPEN @wordCursor;
FETCH NEXT FROM @wordCursor INTO @word;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @text=REPLACE(@text,@word,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@word,'A','-'),'E','-'),'I','-'),'O','-'),'U','-'))
FETCH NEXT FROM @wordCursor INTO @word;
END;
INSERT INTO Comment(messageText) values(@text)
CLOSE @wordCursor;
DEALLOCATE @wordCursor;
输出:卢克,我是你爸爸
我所要的输出是这样的:LK-,我是你的第f-R
有谁知道如何解决这个问题??
你确定要这么做*永久*数据库里面?如果在6个月内添加新的不良词,会发生什么情况?您必须重新处理所有数据。如果情感在一年内变化而“父亲”变得可以接受会发生什么?你必须撤消你的损坏表格(更糟糕的是,如果某人真的进入了并且意味着“f-th-r” - 你实际上改变了他们的原创)。我强烈建议存储用户提供的实际文本,并且仅在演示时执行此替换 - 使用*当前*一组“坏词” –
(此外,您的触发器由于其他原因而被打破 - “插入”可以包含0,1或**多个**行) –
您也不会从字符串中解析单词。当“蛤蜊”调皮时,“Rodger的声明是衷心的”会发生什么?您想如何处理重叠的单词,例如如果“lug”和“beluga”都是冒犯性的? – HABO