2010-08-16 60 views
1

所以我编写了几个存储过程,这些存储过程通过输入一个ID号来处理单个数据行。我想保留几个存储过程,可以在我的数据库方案的不同级别调用此存储过程。例如,当插入一行时,我调用这个存储过程。当别的东西被修改时,我想为每一行调用这个存储过程。这样我就可以拥有一组可以在其他地方调用的基本代码,但是这些基本代码会对不同数量的数据起作用。我已经能够用光标产生这个结果,但我被告知这些效率非常低。有没有其他的方式来产生这种功能而不牺牲性能?谢谢。T-SQL优化各种存储过程的性能问题

+0

鲍勃,当你说“行事”你是什么意思?你审计的行动?您是否通过这些程序更新了参照完整性? – 2010-08-16 04:22:03

回答

1

是的。使用标准连接在集合上操作而不是在RBAR(行通过Agonizing Row)上操作。即不是为每一行调用一个函数,而是设计一个连接,作为设置操作对每一个适用的行执行所需的操作。

我经常看到devs使用'函数在每一行上运行',虽然这似乎是封装逻辑的一种明显方式,但它在SQL Server或大多数数据库引擎上表现不佳。

在某些情况下,可以有效地使用表值函数(MS SQL Server)。

(顺便说一句,你说的光标效率不高)。

+0

嗯,我以为你无法在select语句中调用存储过程。我怎样才能使用一个存储过程来接收ID号并在连接中调用它?谢谢。 – 2010-08-16 00:33:18

+0

@Bob L:我建议你不要。 – 2010-08-16 00:39:11

+0

我明白了......所以让它成为一个函数或什么东西? – 2010-08-16 00:39:42