我正在做一些触发器性能优化,我想测试一下。我有一个实际的触发器和一个修改后的触发器,我想对真实数据在旧触发器和新触发器上进行测试并进行比较。我想将表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

09-30 18:32