找回密码
 立即注册

QQ登录

只需一步,快速开始

平底锅

高级会员

17

主题

21

帖子

1327

积分

高级会员

积分
1327

活字格认证

平底锅
高级会员   /  发表于:2009-12-15 17:46  /   查看:7271  /  回复:1
SQL2005 & SQL2008追加了大型对象数据类型: varchar(max), nvarchar(max), varbinary(max)

如果想修改这类值中的一部分数据,可以使用STUFF的字符串函数,但效率太低。
为了快速的变更数据,建议使用Update的WRITE方法:
        WRITE(@expression,@offset,@length)
        
注意1:1)@expression参数替换目标值中从@offset位置开始的@Length个单位(字符、字节)的字符。
2)@offset从0开始。

例如: UPDATE        TestSample.CustomerData
        SET        txt_data.WRITE('This is update data', 9, 3)
        WHERE        custid = 100;

各个参数的特殊含义:
(1)如果@expression=NULL, @length将被忽略,@offset以后的值被截断。
例如: UPDATE        TestSample.CustomerData
        SET        txt_data.WRITE(NULL, 10, 0)                --截断第10个字符以后的字符
        WHERE        custid = 100;
                        
(2)如果@length=NULL, @offset后的字符串被截掉,@expression被添加到字符串末尾。
例如:UPDATE        TestSample.CustomerData
        SET        txt_data.WRITE('123', 10, NULL)        --从第10位截断字符串,在末尾添加"123"
        WHERE        custid = 100;
                        
(3)如果@offset=NULL & @length=0,则直接把@expression添加到字符串mowei
例如:UPDATE        TestSample.CurstomerData
        SET        txt_data.WRITE('end', NULL, 0)        --字符串末尾添加“end”
        WHERE        custid = 100;


(4)如果@express='',不添加任何数据,只是移除从@offset开始的长度为@length的字符串。
例如:UPDATE        TestSample.CustomerData
        SET        txt_data.WRITE('', 10, 5)                --从第10位移除4个字符
        WHERE        custid = 100;
                        
        
注意2:如果目标LOB为NULL,使用WRITE方法更新将失败。

1 个回复

倒序浏览
WantSong
高级会员   /  发表于:2010-1-26 17:37:00
沙发
建议楼上把表结构给出来,txt_data是个啥呀?
龙灯花鼓夜,长剑走天涯。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部