本文共 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://ssjoo.baihongyu.com/