怎么替换Text字段里的某些指定的内容?

skpay 2005-05-08 04:09:44
比如update table set textarea=replace(texarea,'aa','bb')
这样会报
函数 replace 的参数 1 的数据类型 text 无效。

对Text字段不允许该操作,请问这如何是好?
...全文
183 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2005-05-08
  • 打赏
  • 举报
回复
不敢动的话,在程序中去处理是个不错的选择.
skpay 2005-05-08
  • 打赏
  • 举报
回复
谁有个具体的示例,bol我也看过但是看了一知半解不敢乱动,数据量太大!
duanduan1122 2005-05-08
  • 打赏
  • 举报
回复
我建议你这样来作,
1。利用dts将数据导出到文本文件
2。利用查找替换功能实现
3。再导入
sunmingdong 2005-05-08
  • 打赏
  • 举报
回复
text/image/ntext必须用updatetext处理,
语法:
UPDATETEXT { table_name.dest_column_name dest_text_ptr }
{ NULL | insert_offset }
{ NULL | delete_length }
[ WITH LOG ]
[ inserted_data
| { table_name.src_column_name src_text_ptr } ]

详见sql server的联机帮助
zjcxc 2005-05-08
  • 打赏
  • 举报
回复
--ntext字段替换处理示例
--邹建 2005.04(引用请保留此信息)

--测试数据
CREATE TABLE tb(col ntext)
INSERT tb VALUES(REPLICATE( '0001,0002,0003,0004,0005,0006,0007,0008,0009,0100,'
+'220000001,302000004,500200006,700002008,900002120,',800))
DECLARE @p binary(16)
SELECT @p=TEXTPTR(col) FROM tb
UPDATETEXT tb.col @p NULL 0 tb.col @p
GO

--替换处理定义
DECLARE @s_str nvarchar(1000),@r_str nvarchar(1000)
SELECT @s_str='00' --要替换的字符串
,@r_str='0000' --替换成该字符串

DECLARE @p varbinary(16)
DECLARE @start int,@s nvarchar(4000),@len int
DECLARE @s_len int,@step int,@last_repl int,@pos int

--替换处理参数设置
SELECT
--用于要判断每次截取数据,最后一个被替换数据位置的处理
@s_len=LEN(@s_str),

--设置每次应该截取的数据的长度,防止REPLACE后数据溢出
@step=CASE WHEN LEN(@r_str)>LEN(@s_str)
THEN 4000/LEN(@r_str)*LEN(@s_str)
ELSE 4000 END

--替换处理的开始位置
SELECT @start=PATINDEX('%'+@s_str+'%',col),
@p=TEXTPTR(col),
@s=SUBSTRING(col,@start,@step),
@len=LEN(@s),
@last_repl=0
FROM tb
WHERE PATINDEX('%'+@s_str+'%',col)>0
AND TEXTVALID('tb.col',TEXTPTR(col))=1
WHILE @len>=@s_len
BEGIN
--得到最后一个被替换数据的位置
WHILE CHARINDEX(@s_str,@s,@last_repl)>0
SET @last_repl=@s_len
+CHARINDEX(@s_str,@s,@last_repl)

--如果需要,更新数据,同时判断下一个取数位置的偏移量
IF @last_repl=0
SET @last_repl=@s_len
ELSE
BEGIN
SELECT @last_repl=CASE
WHEN @len<@last_repl THEN 1
WHEN @len-@last_repl>=@s_len THEN @s_len
ELSE @len-@last_repl+2 END,
@s=REPLACE(@s,@s_str,@r_str),
@pos=@start-1
UPDATETEXT TB.col @p @pos @len @s
END
--获取下一个要处理的数据
SELECT @start=@start+LEN(@s)-@last_repl+1,
@s=SUBSTRING(col,@start,@step),
@len=LEN(@s),
@last_repl=0
FROM tb
END
GO

--显示处理结果
SELECT datalength(col),* FROM tb
DROP TABLE tb
7271747 2005-05-08
  • 打赏
  • 举报
回复
update table set textarea=replace(cast(textarea as nvarchar),'aa','bb')
你试试
zjcxc 2005-05-08
  • 打赏
  • 举报
回复
用updatetext处理.
7271747 2005-05-08
  • 打赏
  • 举报
回复
就这个语句来看没有错,你的错应该在其它地方
good2speed 2005-05-08
  • 打赏
  • 举报
回复
text没有这样的东东,你只能用updateText

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧