一般在处理循环问题的时候,大家都会选择Cursor,因为使用起来非常方便,代码也很好实现,但是使用Cursor肯能会产生性能问题。那么有什么好的替代方法吗?从网上看到的一篇文章很有借鉴意义(ReplacingCursors and While Loops),改写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)
替换Cursors和While Loops
原创lzf328 博主文章分类:SQL SERVER ©著作权
文章标签 Replace Cursor 替换SQL Server Cursor 文章分类 数据库
-
Double Cursors
two level loops.
loop double cursor