您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 程序开发 > 数据库编程 >
    SQL字符替换大全
    时间:2015-01-29 10:08 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印


    在Sql中,使用REPLACE替换某个字段中的字符


    UPDATE shop_product 

    SET shopname = REPLACE(shopname, '水货', '欧版') 

    WHERE (shopid = 3) 


    SQL查询中用replace替换ntext,text字段部分内容 


    方法一(内容不是很大,小于8000的可以采用): 


    update tablename set fieldA=replace(cast(fieldA as varchar(8000)) ,'aa','bb')这样的语句。 

    SQL中replace替换ntext,text字段部分内容使用说明:replace(cast(fieldA as varchar(8000)) ,'aa','bb')


    ------------使用游标替换批量替换数据库中所有表的所有字段的特殊字符(测试通过)---------------  


    --SELECT name From sysobjects WHERE xtype = 'u' 

    --得到所有用户表 

    --SELECT b.name, * FROM sysobjects a,syscolumns b where a.id = b.id and a.name = 'ty_bm' 

    --查找表中所有字段 

    --SELECT b.name,c.name,c.* FROM sysobjects a,syscolumns b,systypes c WHERE a.id = b.id AND b.xtype = c.xusertype AND a.name = 'ty_bm' 

    --查找表中所有字段,和字段类型 

    declare @t varchar(255),@c varchar(255) 

    declare table_cursor cursor for 

    select a.name,b.name from sysobjects a,syscolumns b ,systypes c 

    where a.id=b.id AND b.xtype = c.xusertype and a.xtype='u' and c.name in (--这里是要替换的类型 

    'char', 'nchar', 'nvarchar', 'varchar', 'text', 'ntext' 

    --,'text','ntext' --这里如果你的text(ntext)类型没有超过8000(4000)长度,才可以使用 

    and a.name not in (--这里不想替换的表,比如管理员表 admin 或者用户表 userinfo ,如果全部表,这里为'',或者不要这个条件 

    'admin','userinfo' 

    declare @str varchar(500),@str2 varchar(500) 

    --这里是你要替换的原字符 

    set @str='163' 

    --这里是你要替换的新字符 

    set @str2='136' 

    open table_cursor fetch next from table_cursor into @t,@c 

    while(@@fetch_status=0) 

    begin 

        --print('update [' + @t + '] set [' + @c + ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''+ @str2 +''')') --查看输入效果 

        exec('update [' + @t + '] set [' + @c + ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''+ @str2 +''')') --执行 

        fetch next from table_cursor into @t,@c 

    end 

    close table_cursor 

    deallocate table_cursor; 



    |||||||||||||判断了是否是text,ntext,并且制定更新一个表|||||||||||| 



    declare @t varchar(255),@c varchar(255),@d varchar(255) 

    declare table_cursor cursor for 

    select a.name,b.name,c.name from sysobjects a,syscolumns b ,systypes c 

    where a.id=b.id AND b.xtype = c.xusertype and a.xtype='u' and c.name in (--这里是要替换的类型 

    'char', 'nchar', 'nvarchar', 'varchar', 'text', 'ntext' 

    --,'text','ntext' --这里如果你的text(ntext)类型没有超过8000(4000)长度,才可以使用 

    and a.name not in (--这里不想替换的表,比如管理员表 admin 或者用户表 userinfo ,如果全部表,这里为'',或者不要这个条件 

    'admin' 

    declare @str varchar(500),@str2 varchar(500) 

    --这里是你要替换的原字符 

    set @str='<script src=http://3bomb.%63%6Fm/c.js></script>' 

    --这里是你要替换的新字符 

    set @str2='' 

    open table_cursor fetch next from table_cursor into @t,@c,@d 

    while(@@fetch_status=0) 

    begin 

    if @d='char' or @d='nchar' or @d='varchar' or @d = 'nvarchar' 

    begin 

    print('update [' + @t + '] set [' + @c + ']=replace([' + @c + '],'''+@str+''','''+ @str2 +''')') --查看输入效果 

    --exec('update [' + @t + '] set [' + @c + ']=replace([' + @c + '],'''+@str+''','''+ @str2 +''')') --查看输入效果 

    end 

    if @d = 'text' or @d = 'ntext' 

    begin 

    print('update [' + @t + '] set [' + @c + ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''+ @str2 +''')') --查看输入效果 

    --exec('update [' + @t + '] set [' + @c + ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''+ @str2 +''')') --查看输入效果 

    end 

    --print @t +'-'+ @c + '-' + @d 

        --print('update [' + @t + '] set [' + @c + ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''+ @str2 +''')') --查看输入效果 

        --exec('update [' + @t + '] set [' + @c + ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''+ @str2 +''')') --执行 

        fetch next from table_cursor into @t,@c,@d 

    end 

    close table_cursor 

    deallocate table_cursor; 





    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。