就是在插入数据的时候,对某一字段进行验证,如果发现有非法字符用设定好的字符替换 比如插入的字符是:"美女我爱你" 就用女生把美女替换。 并且在整个插入的字段开头和末尾各加一段文字 文字为固定的 想到是用触发器 求个实例吧
如表A
id name des
1 张三 美女我爱你
2 李四 我爱美女
插入后
id name des
1 张三 可爱的 女生我爱你 嫁给我吧
2 李四 可爱的 我爱美女 嫁给我吧
http://topic.csdn.net/u/20110105/14/c17f1f91-dd6f-49d2-9b18-8bc8eda94b4d.html这是上一帖地址 和需求
现在改为: 每次替换多个字符 且des的数据类型为Text类型如表A
id name des
1 张三 美女我爱你
2 李四 我爱美女用女生替换美女 用love替换爱
插入后
id name des
1 张三 漂亮的 女生我love你 嫁给我吧
2 李四 漂亮的 我love女生 嫁给我吧上贴中 Dlut_LIuQ的方法是对的 但是des的数据类型改成Text后执行会有错误 :
数据类型 text 和 varchar 在 add 运算符中不兼容。函数,触发器,或者触发器调用函数都可以 只要实现功能就行
如表A
id name des
1 张三 美女我爱你
2 李四 我爱美女
插入后
id name des
1 张三 可爱的 女生我爱你 嫁给我吧
2 李四 可爱的 我爱美女 嫁给我吧
http://topic.csdn.net/u/20110105/14/c17f1f91-dd6f-49d2-9b18-8bc8eda94b4d.html这是上一帖地址 和需求
现在改为: 每次替换多个字符 且des的数据类型为Text类型如表A
id name des
1 张三 美女我爱你
2 李四 我爱美女用女生替换美女 用love替换爱
插入后
id name des
1 张三 漂亮的 女生我love你 嫁给我吧
2 李四 漂亮的 我love女生 嫁给我吧上贴中 Dlut_LIuQ的方法是对的 但是des的数据类型改成Text后执行会有错误 :
数据类型 text 和 varchar 在 add 运算符中不兼容。函数,触发器,或者触发器调用函数都可以 只要实现功能就行
create table tb
(
id int,
name nvarchar(25),
des text
)
--替换字符表
CREATE TABLE KEYWORD
(
A NVARCHAR(10),
B NVARCHAR(10),
C NVARCHAR(10),
D NVARCHAR(10),
)
INSERT INTO KEYWORD
SELECT '美女','女生','爱','love'
CREATE trigger tri_tb on tb
instead of insert
as
begin
SELECT * INTO #t FROM inserted
update a set a.des='可爱的'+REPLACE(REPLACE(CAST(des AS VARCHAR(8000)),A,B),C,D)+'嫁给我吧'
from #t a join KEYWORD b on charindex(b.A,cast(a.des as varchar(8000)))>0 OR charindex(b.C,cast(a.des as varchar(8000)))>0
--des不能超过8000长度 否则报错。
insert into tb
select * from #t
endinsert into tb
select 1,'张三','美女我爱你' union all
select 2,'李四','我爱美女' UNION ALL
SELECT 3,'LL','WADAD'select * from tb
-------------------
id name des
1 张三 可爱的女生我love你嫁给我吧
2 李四 可爱的我love女生嫁给我吧
3 LL WADAD