如何将表一列中的值连接成字符串,且该串无长度限制!

superwq 2006-09-11 02:27:21
有一个表table1,表有两列(id int, value nvarchar). 表数据例如:
1 aa
2 bb
3 cc
...

现有另一张表table2 (id int, comment ntext),要求将table1中value字段的值首尾相连,保存到table2 的comment字段中。因为table1可能有很多行,类似
declare @sql nvarchar(4000)
set @sql=''
select @sql=@sql+','+aaa from ta

的变量@sql可能无法保存完整数据,而ntext类型不能用作变量类型,请教应该如何解决这个问题?急!多谢!!!
...全文
239 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2006-09-12
  • 打赏
  • 举报
回复
sql 2005定义 nvarchar(max) 类型的变量, 它的长度和 ntext 一样的, 而操作上和普通的nvarchar方法一样的.

所以没有任何技巧上可言, 只是支持的问题.
zzit0721 2006-09-12
  • 打赏
  • 举报
回复
想写入到一个TEXT的表中,再取
superwq 2006-09-12
  • 打赏
  • 举报
回复
再请教一下, 你说 sql 2005就可以直接加起来, 应该如何操作?
superwq 2006-09-12
  • 打赏
  • 举报
回复
非常感谢 zjcxc(邹建) ! 有机会多向你请教!
csdnweii 2006-09-11
  • 打赏
  • 举报
回复
mark
zjcxc 2006-09-11
  • 打赏
  • 举报
回复
当然, 这个处理还可以优化, 比如先把value组合成差不多4000长度的时候再写入, 这样可以减少写入的次数
zjcxc 2006-09-11
  • 打赏
  • 举报
回复
-- 示例数据
CREATE TABLE table1(id int, value nvarchar(100))
INSERT table1 SELECT 1, 'aa'
UNION ALL SELECT 2, 'bb'
UNION ALL SELECT 2, 'cc'

CREATE TABLE table2(id int, comment ntext)
GO

-- 写入处理
DECLARE
@s nvarchar(4000),
@p binary(16),
@value nvarchar(100)

-- 初始化 table2
INSERT table2 VALUES(1, N'')

-- 写的指针
SELECT @p = TEXTPTR(comment)
FROM table2

-- 读 table1 的数据写入 table2
DECLARE tb CURSOR LOCAL
FOR
SELECT value FROM table1 ORDER BY id
OPEN tb
FETCH tb INTO @value
WHILE @@FETCH_STATUS = 0
BEGIN
SET @s = @value + ','
UPDATETEXT table2.comment @p NULL 0 @s

FETCH tb INTO @value
END
CLOSE tb
DEALLOCATE tb
DECLARE @l int
SELECT @l = DATALENGTH(comment) /2 - 1 FROM table2
UPDATETEXT table2.comment @p @l 1 ''

SELECT * FROM table2
GO

DROP TABLE table1, table2
zsforever 2006-09-11
  • 打赏
  • 举报
回复
学习
zjcxc 2006-09-11
  • 打赏
  • 举报
回复
用updatetext加游标写吧.


sql 2005就可以直接加起来.

22,209

社区成员

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

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