导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

强烈讨论:存储过程 -- 同一段时间执行的影响

winnet 2003-12-18 09:03:12
有一个很大的存储过程,其中用到N个临时表和游标,如果有一用户在执行这个存储过程的时候(也就是存储过程还没有执行完毕),另一用户又执行这个存储过程,那样会有什么样的结果?怎样控制?
...全文
64 点赞 收藏 14
写回复
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
winnet 2003-12-20
请大家继续发表意见
回复
cgsun 2003-12-18
到N个临时表和游标,用臨時的,但是數據是所有用共有的,
注意事務,鎖的運用
回复
Arionma 2003-12-18
在语句中多做回馈信息,这样也方便调试。
回复
txlicenhe 2003-12-18
一般都不会有问题的。
注意不要用全局临时表,全局游标,全局变量之类的。
回复
w_rose 2003-12-18
事实上,即使不用begin tran语句,SQL Server也会为每一个改变数据的SQL命令隐含地创建事务,因此SQL Server程序员可以高枕无忧。如果你用过其它数据库处理过大的业务量,就知道不做保守的保护操作的危害了。一些号称很快的数据库系统,例如mySQL、interbase、Access等,程序员很难在设计大型商业系统时方便地对用户体现“责任感”——保护数据在任何意外情况下的一致性。
回复
w_rose 2003-12-18
SQL Server是一个“事物安全的系统,也就是说自动的事务保护、LOG是它的“底线”(这与mySQL不在同一个层级),因此,当有多个事务共同操作数据的时候,数据因为(显示的或者隐含的)事务保护的原因而不会出现“混乱”——如果没有事务冲突则过程并行执行,如果有冲突则事务顺序执行。
回复

临时表定义成局部的,即:#临时表名
游标也定义成局部的,即:declare 游标名 cursor local for

就不会有影响了.
回复
lfangxiao 2003-12-18
另外定义游标的时候一定要注意游标的作用域的问题,因为多用户环境下定义全局游标会引起很大的阻塞
回复
ghosthjt 2003-12-18
在存储过程中多用事务,多提交事务。
回复
tjan 2003-12-18
是否可以首先考虑精简其业务流程,如果不能精简的话,再考虑优化存储过程内的每个 SQL 语句、减少临时表的数量、减小临时表中的数据量、用循环代替游标等。
回复
tjan 2003-12-18
#临时表是每个进程独有的,不会产生任何的冲突

##临时表是全局的,会产生冲突的
回复
hiyo 2003-12-18
补充一句:最好少用或不用临时表
回复
hiyo 2003-12-18
首先考虑精简其业务流程,如果不能精简的话,再考虑优化存储过程内的每个 SQL 语句、减少临时表的数量、减小临时表中的数据量、用循环代替游标等
回复
winnet 2003-12-18
我的存储过程里用到的都是局部的临时表和游标,变量.
现在的问题是,第一个用户在执行存储过程,也就是有一些临时表是建立啦,,但未执行完的时候是不删除的,但这时另一用户又执行,是不是什么创建临时表出错????
还有SQL会为每一个用户在执行存储过程的时候独立分出一个内存空间来处理这个用户的数据,还有众多用户共用???
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告