如何用游标将cursor_created表数据重复插入cursor_copied表两次?
解决游标插入重复数据的问题
嘿,我明白你的需求啦——你想用游标把cursor_created里的每条数据都插入cursor_copied两次,但现在的代码只完成了单次插入。其实改起来超简单,只需要在循环体里多执行一次INSERT语句就行!
修改后的完整代码
DECLARE @ID INT DECLARE @Name NVARCHAR(50) DECLARE @Amount DECIMAL(18,0) DECLARE @Date NVARCHAR(50) DECLARE IDs CURSOR FOR SELECT ID, Name, Amount, Date FROM cursor_created OPEN IDs FETCH NEXT FROM IDs into @ID, @Name, @Amount, @Date WHILE @@FETCH_STATUS = 0 BEGIN -- 第一次插入数据 INSERT INTO cursor_copied (id, name, amount, date) VALUES (@ID, @Name, @Amount, @Date) -- 第二次插入同一条数据 INSERT INTO cursor_copied (id, name, amount, date) VALUES (@ID, @Name, @Amount, @Date) -- 这些调试语句可以按需保留 -- print @ID -- print @Name -- print @Amount -- print @Date -- SELECT @ID, @Name, @Amount, @Date FROM cursor_copied FETCH NEXT FROM IDs into @ID, @Name, @Amount, @Date END CLOSE IDs DEALLOCATE IDs
改动说明
原来的循环里每次只执行一次INSERT,所以每条数据只会被复制一次。现在在同一个循环周期内连续执行两次插入操作,游标每读取一条源数据,就会向目标表写入两次,正好能得到你想要的重复结果。
额外小建议:更高效的非游标写法
如果你的数据量不算特别大,其实没必要用游标(游标是逐行处理,性能相对偏低),可以直接用集合操作实现,代码更简洁,执行效率也更高:
INSERT INTO cursor_copied (id, name, amount, date) SELECT id, name, amount, date FROM cursor_created UNION ALL SELECT id, name, amount, date FROM cursor_created;
这个语句会把cursor_created的所有数据查询两次,然后一次性批量插入到cursor_copied中,效果和游标版本完全一致,但速度会快很多哦~
内容的提问来源于stack exchange,提问作者aparna rai
相关产品推荐
相关产品推荐

