text字段的替换问题,希望那位老师给指点迷津
表dict100_400有3个字段 ename,zhname,exname其中exname是TEXT类型,最长的文字达15000多,本来打算导入数据是用varchar(8000),结果发现失败,于是把exname改成TEXT类型了,但是现在遇到个问题:
数据库中数据是这样的,比如
exname zhname exname
----------------------------------
map 地图;测图 ~ controlled|地图定位,~ in roll|卷图,卷轴图,~ into|映入......
map的exname比较长 有15123字节
现在我怎么做才能把exname中的~替换为map就比如:
map controlled|地图定位,map in roll|卷图,卷轴图,map into|映入,
当然,数据库中5000条记录有100多条是这样,一句搞定最好了
------解决方案--------------------------邹老大的例子-----
CREATE TABLE tb(col text,col1 text,col2 text)
INSERT tb SELECT 'a ' ,NULL, 'c2 '
UNION ALL SELECT NULL, 'b2 ', 'c2 '
UNION ALL SELECT ' ' , 'b3 ',NULL
GO
--뫘劤뇹잿
DECLARE @p binary(16),@p1 binary(16),@p2 binary(16)
DECLARE tb CURSOR LOCAL
FOR
SELECT TEXTPTR(col),TEXTPTR(col1),TEXTPTR(col2) FROM tb
OPEN tb
FETCH tb INTO @p,@p1,@p2
WHILE @@FETCH_STATUS=0
BEGIN
IF TEXTVALID( 'tb.col ',@p)=0
BEGIN
UPDATE tb SET col= ' ' WHERE CURRENT OF tb
UPDATE tb SET @p=TEXTPTR(col) WHERE CURRENT OF tb
END
IF TEXTVALID( 'tb.col1 ',@p1)=1
BEGIN
UPDATETEXT tb.col @p NULL 0 ' <col1> '
UPDATETEXT tb.col @p NULL 0 tb.col1 @p1
UPDATETEXT tb.col @p NULL 0 ' </col1> '
END
IF TEXTVALID( 'tb.col2 ',@p2)=1
BEGIN
UPDATETEXT tb.col @p NULL 0 ' <col2> '
UPDATETEXT tb.col @p NULL 0 tb.col2 @p2
UPDATETEXT tb.col @p NULL 0 ' </col2> '
END
FETCH tb INTO @p,@p1,@p2
END
CLOSE tb
DEALLOCATE tb
GO
--鞫刻써벎
SELECT * FROM tb
DROP TABLE tb
/*--써벎
col col1 col2
-------------------------------------- ----------------------- ----------------------
a <col2> c2 </col2> NULL c2
<col1> b2 </col1> <col2> c2 </col2> b2 c2
<col1> b3 </col1> b3 NULL
--*/
------解决方案--------------------是sql server2005吗?
尝试用varchar(max)类型看看~
------解决方案--------------------看一下我写的
drop table att
create table att(id int ,atext Ntext)
insert into att select 1,N '~ controlled|地图定位,~ in roll|卷图,卷轴图,~ into|映入...... '
insert into att select 2,N '地图定位|映入...... '
insert into att select 3,N '~ controlled|地图定位,~~ into|映入...... '
declare @aa BINARY(16)
declare @i int
declare @id int
declare RepaceText cursor
for
select id,PATINDEX( '%~% ', atext) from att where PATINDEX( '%~% ', atext)> 0
open RepaceText
fetch next from RepaceText into @id,@i
while @@fetch_status=0
begin
--print @id
while @i> =0
begin
SELECT @aa = TEXTPTR(atext),
@i = PATINDEX( '%~% ', atext) - 1
FROM att
WHERE id = @id
--print @i
if @i> =0
begin
UPDATETEXT att.atext
@aa
@i --插入的位置
1 --删除的字符数
WITH LOG
'map ' --要新插入的文