转:http://topic.csdn.net/t/20040627/22/3126726.html
问题
取值问题!!
以及用Text在使用Select 查询 和INSERT Update解决之道!
比喻发通过declare @content Text 去Select @content=content(Text类型)最值呢???寻求Text类型字段的解决之道!!!
--
text字段增加处理
-- 创建测试表
create table test(id varchar ( 3 ),detail text )
insert into test
select ' 001 ' , ' A*B '
-- 定义添加的的字符串
declare @s_str varchar ( 8000 ), @postion int
select @s_str = ' *C ' -- 要添加的字符串
, @postion = null -- 追加的位置,null 加在尾部,0 加在首部,其他值则加在指定位置
-- 字符串添加处理
declare @p varbinary ( 16 )
select @p = textptr (detail) from test where id = ' 001 '
updatetext test.detail @p @postion 0 @s_str
-- 显示处理结果
select * from test
go
-- 删除测试表
drop table test
-- 创建测试表
create table test(id varchar ( 3 ),detail text )
insert into test
select ' 001 ' , ' A*B '
-- 定义添加的的字符串
declare @s_str varchar ( 8000 ), @postion int
select @s_str = ' *C ' -- 要添加的字符串
, @postion = null -- 追加的位置,null 加在尾部,0 加在首部,其他值则加在指定位置
-- 字符串添加处理
declare @p varbinary ( 16 )
select @p = textptr (detail) from test where id = ' 001 '
updatetext test.detail @p @postion 0 @s_str
-- 显示处理结果
select * from test
go
-- 删除测试表
drop table test
--
text字段的替换处理示例--全表替换
-- 创建数据测试环境
create table test(id varchar ( 3 ),txt text )
insert into test
select ' 001 ' , REPLICATE ( ' a ' , 4000 ) + REPLICATE ( ' b ' , 2000 ) + REPLICATE ( ' ab ' , 2000 )
union all select ' 002 ' , REPLICATE ( ' a ' , 4000 ) + REPLICATE ( ' b ' , 2000 ) + REPLICATE ( ' ab ' , 2000 )
go
select datalength (txt), * from test
-- 定义替换的字符串
declare @s_str varchar ( 8000 ), @d_str varchar ( 8000 )
select @s_str = ' a ' -- 要替换的字符串
, @d_str = ' ab ' -- 替换成的字符串
-- 因为只能用patindex,所以对于搜索字符串做处理
set @s_str = ' % ' + @s_str + ' % '
-- 定义游标,循环处理数据
declare @id varchar ( 3 )
declare #tb cursor for select id from test
open #tb
fetch next from #tb into @id
while @@fetch_status = 0
begin
-- 字符串替换处理
declare @p varbinary ( 16 )
, @p1 int , @p2 int
, @rplen int , @step int , @len int
select @p = textptr (txt)
, @rplen = len ( @s_str ) - 2
, @step = len ( @d_str )
, @p1 = patindex ( @s_str ,txt)
, @len = datalength (txt)
, @p2 = 0
from test where id = @id
while @p1 > 0
begin
set @p2 = @p1 + @p2 - 1
updatetext test.txt @p @p2 @rplen @d_str
select @p2 = @p2 + 1 , @p1 = patindex ( @s_str , substring (txt, @p2 + 1 , @len ))
from test where id = @id
end
fetch next from #tb into @id
end
close #tb
deallocate #tb
-- 显示结果
select datalength (txt), * from test
go
-- 删除数据测试环境
drop table test
-- 创建数据测试环境
create table test(id varchar ( 3 ),txt text )
insert into test
select ' 001 ' , REPLICATE ( ' a ' , 4000 ) + REPLICATE ( ' b ' , 2000 ) + REPLICATE ( ' ab ' , 2000 )
union all select ' 002 ' , REPLICATE ( ' a ' , 4000 ) + REPLICATE ( ' b ' , 2000 ) + REPLICATE ( ' ab ' , 2000 )
go
select datalength (txt), * from test
-- 定义替换的字符串
declare @s_str varchar ( 8000 ), @d_str varchar ( 8000 )
select @s_str = ' a ' -- 要替换的字符串
, @d_str = ' ab ' -- 替换成的字符串
-- 因为只能用patindex,所以对于搜索字符串做处理
set @s_str = ' % ' + @s_str + ' % '
-- 定义游标,循环处理数据
declare @id varchar ( 3 )
declare #tb cursor for select id from test
open #tb
fetch next from #tb into @id
while @@fetch_status = 0
begin
-- 字符串替换处理
declare @p varbinary ( 16 )
, @p1 int , @p2 int
, @rplen int , @step int , @len int
select @p = textptr (txt)
, @rplen = len ( @s_str ) - 2
, @step = len ( @d_str )
, @p1 = patindex ( @s_str ,txt)
, @len = datalength (txt)
, @p2 = 0
from test where id = @id
while @p1 > 0
begin
set @p2 = @p1 + @p2 - 1
updatetext test.txt @p @p2 @rplen @d_str
select @p2 = @p2 + 1 , @p1 = patindex ( @s_str , substring (txt, @p2 + 1 , @len ))
from test where id = @id
end
fetch next from #tb into @id
end
close #tb
deallocate #tb
-- 显示结果
select datalength (txt), * from test
go
-- 删除数据测试环境
drop table test