本文主要是介绍替换Cursors和While Loops,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一般在处理循环问题的时候,大家都会选择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 NEXT FROM temp_cursor
INTO @tmp_data
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @tmp_values = @tmp_values + convert(varchar(20), @tmp_data) + ','
FETCH NEXT FROM 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(@id as 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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!