操作大长度的字符串拼接时该怎么效率的进行

ltaixxx 2015-06-10 09:56:19
因为项目需要,需要完成这一个查询存储过程:
其中有返回值
@data nvarchar(MAX) output

在操作过程中,可能需要及时查询1000条数据或者更多,并将查询得到的数据 筛选后 拼接到字符串
while(i<1000){
......
set @data=@data+@account+'|'
}

然后将@data 插入另一张表

这个过程中问题就来了
在循环中,字符串越拼越大,处理效率越来越低,一旦这个次数过多 超过1000 或者更多的时候,事务就会被锁死

这样的例子,该用个什么办法来有效解决呢

像C# 一样,单纯的字符串拼接效率是很慢的,但如果用StringBuilder 效率就会提高几百倍, 请问sql server 中是不是也有类似的呢?
...全文
213 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ltaixxx 2015-06-10
  • 打赏
  • 举报
回复
哈哈,受到启发,找到办法了,谢谢各位
tcmakebest 2015-06-10
  • 打赏
  • 举报
回复
引用 3 楼 Tiger_Zhao 的回复:
C# 可以做成 SQL CLR 的函数/存储过程,不就可以用 StringBuilder 了。
这个想法不错,就是过程复杂了点,要求也高(SQL2005及 上)。 楼主的方法我在本机测了一万条数据,没有感觉到多慢啊,我用的SQL2005。
Tiger_Zhao 2015-06-10
  • 打赏
  • 举报
回复
C# 可以做成 SQL CLR 的函数/存储过程,不就可以用 StringBuilder 了。
gw6328 2015-06-10
  • 打赏
  • 举报
回复
不用循环,直接选看是否好一些 select stuff((select ','+data from tb where 条件 for xml path('')),1,1,'')
还在加载中灬 2015-06-10
  • 打赏
  • 举报
回复
如果拼接的内容是在 表里面

可以试一下

SELECT TOP 1000 @data=@data+列1+列2+'|'的方式
FROM TB
ORDER BY 排序方式

22,209

社区成员

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

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