小编Wes*_*all的帖子

究竟何时多个用户无法同时运行带有临时表的存储过程?

我有一个关于我最近在TechNet 上阅读的有关临时表的文档的问题。该页临时表部分的第四段内容如下:

如果使用命名约束创建临时表,并且临时表是在用户定义的事务范围内创建的,则一次只有一个用户可以执行创建临时表的语句。例如,如果一个存储过程创建了一个带有命名主键约束的临时表,则该存储过程不能被多个用户同时执行。

我在这样一个环境中工作,在这种环境中,我们大量使用了一些使用索引临时表的存储过程,而且我们从未遇到过用户必须等待一次执行完成才能开始下一次执行的问题。我希望情况会继续如此,但我担心如果没有正确理解这个警告,它可能会成为一个问题。

具体来说,我不清楚以下几点:

  1. 这仅适用于全局临时表,还是也适用于本地临时表?在会话之外不可见的表(如后一种情况)会阻止另一个会话同时执行,这似乎很奇怪。
  2. 什么是“命名约束”?不是所有的约束都有名字吗(即使它们是系统生成的)?这是指具有用户定义别名的约束吗?这对我来说似乎是糟糕的措辞。
  3. “多个用户”实际上意味着多个会话吗?这些过程是通过我们的应用程序使用单个服务帐户调用的,因此对我们脚本的 99.9% 的调用是由该单个帐户对数据库进行的(而且我不关心管理员偶尔会在后端进行调用)。如果服务帐户可以同时在多个会话中运行 sproc,那么这个问题对我来说没有意义。

sql-server stored-procedures temporary-tables

9
推荐指数
2
解决办法
1754
查看次数