【发布时间】:2011-01-28 09:48:50
【问题描述】:
我正在做一些触发器性能优化,我想对其进行测试。我有一个实际触发器和一个修改后的触发器,我想在真实数据上对旧触发器和新触发器进行测试并进行比较。我想将表 A 逐行复制到 A_BCK。表 A 大约有 60 列和 4000 行,所以我的触发器将被执行 4000 次,我可以将它用于性能测试。
我读过游标,但不知道如何使用游标和变量进行逐行复制(不是选择到 a_bck 或插入到 a_bck 中,从 a 中选择都只生成一个插入)。
我的行复制过程现在看起来像这样:
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。有人可以帮助我完成任务吗?
【问题讨论】:
-
为什么要逐行做这个? MSSQL 是基于集合的。避免使用光标,尤其是在触发器中 - 除非您喜欢生活在痛苦的世界中。
-
我不这样做 in 我的触发器。我想这样做是为了测试我的触发器。我需要一种方法来对真实数据执行触发器。
-
嗯,如果您将 ` 删除到 @actualrow` 位,它会将整行返回给客户端。我不确定是否有以某种方式将该行插入另一个表的语法。
-
@Martin - 不,不进入表变量:social.msdn.microsoft.com/Forums/en-US/transactsql/thread/…
-
@cyberkiwi - 我的答案应该适用于电视。
标签: sql sql-server tsql insert cursor