关于ntext字段的更新问题,急

cmlcm 2005-12-16 03:09:37
问题是这样的,现在我要合并表中名称重复的记录,比如有三条记录名称相同:
proid proname memo(ntext) price
100 XXXVCD <Long Text> 10
101 XXXVCD <Long Text> 20
102 XXXVCD <Long Text> 15
合并为一条记录(比如合并为proid=100的那条记录,其他两条删除),并且在这三条记录中取“memo”字段最长的记录作为新“memo”字段的值
现在的问题是ntext字段的值不可以赋给变量,也不能直接用在
update以及writetext里面,请高手指点,谢谢
...全文
157 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cmlcm 2005-12-16
  • 打赏
  • 举报
回复
能具体点吗
zlp321002 2005-12-16
  • 打赏
  • 举报
回复
--用由游标处理。
cmlcm 2005-12-16
  • 打赏
  • 举报
回复
我研究了一天了,也是卡在writetext的后面那个data参数上了
网上的例子全部是用的常量,晕啊
mislrb 2005-12-16
  • 打赏
  • 举报
回复
哎忙活半天,真不知道怎么根据文本指针返回ntext给变量,哪位高手来帮帮吧,我学习

create table #t(proid int,proname varchar(10), memo ntext, price decimal)
insert #t
select 100,'XXXVCD','select into aaabbb',10 union all
select 101,'XXXVCD','select aaaa into from bbb',20 union all
select 102,'XXXVCD',null,15

declare @newMemo varbinary(16),@oldMemo varbinary(16)

select @newMemo=textptr(memo)
from #t
where proid=(select top 1 proid
from #t
where proname=(select top 1 proname
from #t
where proid='100')
order by datalength(memo) desc
)
select @oldMemo=textptr(memo) from #t where proid='100'

-- READTEXT #t.memo @newMemo 0 0

-- WriteTEXT #t.memo @oldMemo exec('READTEXT t.memo @newMemo 0 0')

--select * from #t where proid='100'

cmlcm 2005-12-16
  • 打赏
  • 举报
回复
谢谢你的恢复,不过
memo不能转换为varchar的,
数据库中memo字段的值最长达到了110多K,
转换后会截断数据的
还有其他方法吗
liujx_1999 2005-12-16
  • 打赏
  • 举报
回复
Create table Tbl(proid int,proname varchar(100),memo ntext,price numeric(18,2))
insert into Tbl(proid ,proname,memo ,price)values (100,'XXXVCD','AAAA',10)
insert into Tbl(proid ,proname,memo ,price)values (101,'XXXVCD','AAAABBBB',20)
insert into Tbl(proid ,proname,memo ,price)values (102,'XXXVCD','AAAABBBCCCCC',50)
insert into Tbl(proid ,proname,memo ,price)values (100,'XXXVCE','AAAA',10)
insert into Tbl(proid ,proname,memo ,price)values (101,'XXXVCE','AAAABBBB',20)
insert into Tbl(proid ,proname,memo ,price)values (102,'XXXVCE','AAAABBBCCCCC',50)
select * from Tbl
select proname,max(cast(memo as varchar(8000) )) as memo into #AA from Tbl group by proname
select min(proid) as proid ,proname into #Temp from Tbl B group by proname
Delete Tbl where proid not in (select proid from #Temp)
update Tbl set memo=B.memo from Tbl A left join #AA B on (A.proname=B.proname)
select * from Tbl
drop table #AA,#Temp
drop table Tbl


22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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