首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • updatetext 更新ntext字段不成功? [已结帖,结帖人:gogocoming]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gogocoming
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-11-17 10:40:12 楼主
    我有表userskin,其中有字段 skinmain;我想把该字段中的'http://127.0.0.1/ ',换成"/"
    在网上搜了以后,得到以下代码:
    可是试了几次却不成功,请问为什么?

    declare      @s_str      varchar(8000),@d_str      varchar(8000)     
    select     
    @s_str= 'http://127.0.0.1/ '      --要替换的字符串 
    ,@d_str= '/'  --替换成的字符串     

    --字符串替换处理     
    declare      @p      varbinary(16),@postion      int,@rplen      int     
    select      @p=textptr(skinmain),@rplen=len(@s_str),@postion=charindex(@s_str,skinmain)-1      from      userskin     
    while      @postion> 0     
    begin     
        updatetext      userskin.skinmain      @p      @postion      @rplen      @d_str     
        select  @postion=charindex(@s_str,skinmain)-1      from      userskin     
    end
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • redcn2004
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-17 12:45:091楼 得分:5
    用这个试试 一个简单的替换字符的SQL命令(有人说数据转换的时候需要)
    CODE:

    UPDATE `cdb_name` SET `field_name` = replace (`field_name`,'from_str','to_str')
    说明:

    cdb_name —— 该字符或字符串所在表的名字
    field_name —— 该字符或字符串所在字段的字段名
    from_str —— 需要替换的字符串
    to_str —— 替换成的字符串

    目的是为了直接用sql操作数据库修改字段中的某些字串
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hulangfy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-17 14:23:312楼 得分:5
    引用 1 楼 redcn2004 的回复:
    用这个试试 一个简单的替换字符的SQL命令(有人说数据转换的时候需要)
    CODE:

    UPDATE `cdb_name` SET `field_name` = replace (`field_name`,'from_str','to_str')
    说明:

    cdb_name —— 该字符或字符串所在表的名字
    field_name —— 该字符或字符串所在字段的字段名
    from_str —— 需要替换的字符串
    to_str —— 替换成的字符串

    目的是为了直接用sql操作数据库修改字段中的某些字串

    顶了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sunli555
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-17 16:18:503楼 得分:5
    varchar(8000)  换成NVARCHAR的数据类型后再做类似操作试试。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gogocoming
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-17 21:40:364楼 得分:0
    引用 1 楼 redcn2004 的回复:
    用这个试试 一个简单的替换字符的SQL命令(有人说数据转换的时候需要)
    CODE:

    UPDATE `cdb_name` SET `field_name` = replace (`field_name`,'from_str','to_str')
    说明:

    cdb_name —— 该字符或字符串所在表的名字
    field_name —— 该字符或字符串所在字段的字段名
    from_str —— 需要替换的字符串
    to_str —— 替换成的字符串

    目的是为了直接用sql操作数据库修改字段中的某些字串



    ntext 类型的不可以用replace

    还有我的数据是超过8000;varchar(8000)  换成NVARCHAR的数据类型后再做类似操作试试。----------也没有用啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dogfish
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-18 01:33:115楼 得分:35
    这里有一个例子。

    SQL code
    ALTER PROC dbo.SearchAndReplace ( @FindString NVARCHAR(100) ,@ReplaceString NVARCHAR(100) ) AS BEGIN SET NOCOUNT ON DECLARE @TextPointer VARBINARY(16) DECLARE @DeleteLength INT DECLARE @OffSet INT SELECT @TextPointer = TEXTPTR([MY_TEXT_COLUMN]) FROM [MY_TABLE] SET @DeleteLength = LEN(@FindString) SET @OffSet = 0 SET @FindString = '%' + @FindString + '%' WHILE (SELECT COUNT(*) FROM [MY_TABLE] WHERE PATINDEX(@FindString, [MY_TEXT_COLUMN]) <> 0) > 0 BEGIN SELECT @OffSet = PATINDEX(@FindString, [MY_TEXT_COLUMN]) - 1 FROM [MY_TABLE] WHERE PATINDEX(@FindString, [MY_TEXT_COLUMN]) <> 0 UPDATETEXT [MY_TABLE].[MY_TEXT_COLUMN] @TextPointer @OffSet @DeleteLength @ReplaceString END SET NOCOUNT OFF END
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gogocoming
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 15:25:006楼 得分:0
    引用 5 楼 dogfish 的回复:
    这里有一个例子。


    SQL codeALTER PROC dbo.SearchAndReplace
    (
        @FindString    NVARCHAR(100)
        ,@ReplaceString NVARCHAR(100)
    )
    AS
    BEGIN
        SET NOCOUNT ON

        DECLARE @TextPointer VARBINARY(16)
        DECLARE @DeleteLength INT
        DECLARE @OffSet INT

        SELECT @TextPointer = TEXTPTR([MY_TEXT_COLUMN])
          FROM [MY_TABLE]

        SET @DeleteLength = LEN(@FindString)
      …



    服务器: 消息 7135,级别 16,状态 4,过程 SearchAndReplace ,行 29
    删除长度 17 不在可用的 text、ntext 或 image 数据范围内。
    语句已终止。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gogocoming
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 15:59:077楼 得分:0
    服务器: 消息 7135,级别 16,状态 4,过程 SearchAndReplace ,行 29
    删除长度 17 不在可用的 text、ntext 或 image 数据范围内。
    语句已终止。


    这个错误我几经解决了,现在执行成功,(我在sql查询分析器;和asp文件中都执行成功)


    可是字段里面依然有127.0.0.1,匹配记录条数和没有执行存储过程前一样;

    SELECT COUNT(*) AS Expr1
    FROM UDMBK_userskin
    WHERE (skinmain LIKE '%127.0.0.1%')


    这就回到原来的问题
    declare      @s_str      varchar(8000),@d_str      varchar(8000)     
    select     
    @s_str= 'http://127.0.0.1/ '      --要替换的字符串 
    ,@d_str= '/'  --替换成的字符串     

    --字符串替换处理     
    declare      @p      varbinary(16),@postion      int,@rplen      int     
    select      @p=textptr(skinmain),@rplen=len(@s_str),@postion=charindex(@s_str,skinmain)-1      from      userskin     
    while      @postion> 0     
    begin     
        updatetext      userskin.skinmain      @p      @postion      @rplen      @d_str     
        select  @postion=charindex(@s_str,skinmain)-1      from      userskin     
    end
    这个sql在执行其测试表中的ntext字段时,一点问题也没有;可是就是到了userskin这个表中,它也是通过,没有抱错;可就是字段值仍然没有被更改。


    怪了,这是为什么啊?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gogocoming
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-20 22:39:428楼 得分:0
    没办法了,只好给分了。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved