博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
替换Cursors和While Loops
阅读量:6692 次
发布时间:2019-06-25

本文共 1078 字,大约阅读时间需要 3 分钟。

一般在处理循环问题的时候,大家都会选择Cursor,因为使用起来非常方便,代码也很好实现,但是使用Cursor肯能会产生性能问题。那么有什么好的替代方法吗?从网上看到的一篇文章很有借鉴意义(),改写Cursor性能提高了几倍.

 

所以我们在设计代码的时候可以多考虑考虑是否不用Cursor也可以实现。 源代码和改写后的代码如下:

 

--源代码先查询r查询@tmp_id然后跟据@tmp_id获得tmp_values然后更新表OutPut_tbl的值

 

DECLARE temp_cursor CURSOR FOR

SELECT column_data

FROM DB.dbo.many_tbl

WHERE id = @tmp_id -- key data

ORDER BY column_data

 

OPEN temp_cursor

 

FETCH NEXTFROM temp_cursor

 

INTO @tmp_data

 

WHILE @@FETCH_STATUS = 0

 

BEGIN

 

SELECT @tmp_values = @tmp_values + convert(varchar(20), @tmp_data)+ ','

 

FETCH NEXTFROM temp_cursor

INTO @tmp_data

END

 

CLOSE temp_cursor

DEALLOCATE temp_cursor

 

UPDATE DB.dbo.OutPut_tbl

SET column_out = @tmp_values

WHERE id = @tmp_id

 

--替换代码(速度变快而且代码简洁)

 

CREATE function dbo.ufn_data_pivot(@idas int)

Returns varchar(20)

AS

BEGIN

DECLARE @value varchar(20)

SET @value = ''

SELECT @value = @value + convert(varchar(20), column_data)+ ','

FROM DB.dbo.many_tbl

WHERE id = @id

ORDER BY column_data

 

Return @value

END

 

UPDATE DB.dbo.OutPut_tbl

SET column_out= dbo.ufn_data_pivot(key_column)

 

本文转自 lzf328 51CTO博客,原文链接:

http://blog.51cto.com/lzf328/1044841

转载地址:http://ssjoo.baihongyu.com/

你可能感兴趣的文章
Upgrade json-serde-xxx jar in Apache Hive-1.2.1
查看>>
Dart入门—开发环境
查看>>
PHP>5.3版本部分新功能
查看>>
irrlicht引擎:实现天龙八部的RPG换装
查看>>
转 【转载】 SYN cookies 机制下连接的建立
查看>>
ExtJS 4.2 教程-02:bootstrap.js 工作方式
查看>>
利用jquery制作闪动标题
查看>>
SQLServer · 最佳实践 · 数据库实现大容量插入的几种方式
查看>>
AWK文本处理工具(Linux)
查看>>
JavaEE 获取路径全攻略
查看>>
使用mina解析http协议的使用
查看>>
Code Review for Vue 2.0 Preview
查看>>
java8 去掉 perm 用 Metaspace 来替代
查看>>
jQuery-鼠标经过激活效果
查看>>
HTML5_Canvas(2)
查看>>
ENode框架Conference案例分析系列之 - 上下文划分和领域建模
查看>>
Kettle dependency management
查看>>
看美剧英文字幕学英语的利器——“深蓝英文字幕助手”简介
查看>>
使用IntelliJ IDEA 13搭建Android集成开发环境(图文教程)
查看>>
使用JDBC对数据库进行查询的前期准备工作,以及简单的JDBC访问MySQL数据库(Mac)...
查看>>