我正在做一些触发器性能优化,我想测试一下。我有一个实际的触发器和一个修改后的触发器,我想对真实数据在旧触发器和新触发器上进行测试并进行比较。我想将表A逐行复制到A_BCK。表A大约有60列和4000行,因此我的触发器将被执行4000次,因此我可以将其用于性能测试。
我已经读过有关游标的信息,但无法弄清楚如何使用游标和变量进行逐行复制(而不是选择a_bck或将a插入到a_bck select中,这两者都只会生成一个插入)。
到目前为止,我的行复制过程如下所示:
declare @actualrow varchar(15);
DECLARE eoauz CURSOR FAST_FORWARD FOR SELECT * FROM A
open eoauz
fetch next from eoauz into @actualrow
while @@fetch_status = 0
begin
/* INSERT INTO A_BCK VALUES FROM @actualrow */
fetch next from eoauz into @actualrow
end
close eoauz
deallocate eoauz
当然这是行不通的。我需要类似行变量而不是varchar的东西。有人可以帮助我完成任务吗?
最佳答案
我不经常使用游标,因此可能缺少更直接的方式...
SELECT TOP 0 *
INTO #t
FROM master..spt_values /*Create an empty table of correct schema*/
DECLARE eoauz CURSOR FAST_FORWARD FOR
SELECT *
FROM master..spt_values
OPEN eoauz
INSERT INTO #t
EXEC ('fetch next from eoauz')
WHILE @@FETCH_STATUS = 0
INSERT INTO #t
EXEC ('fetch next from eoauz')
CLOSE eoauz
DEALLOCATE eoauz
SELECT *
FROM #t
DROP TABLE #t