我对最近在TechNet上阅读的有关Temp Tables的文档有疑问。该页面上“ 临时表”部分的第四段内容如下:
如果使用命名约束创建了一个临时表,并且该临时表是在用户定义的事务范围内创建的,则一次只能有一个用户可以执行创建临时表的语句。例如,如果存储过程创建具有命名主键约束的临时表,则该存储过程不能由多个用户同时执行。
我在这样一个环境中工作:我们大量使用了一些使用索引临时表的存储过程,而我们从未遇到过用户必须等待一个执行完成才能开始下一个执行的问题。我希望情况会继续如此,但我担心,如果未正确理解此警告,可能会成为一个问题。
具体来说,我不清楚以下几点:
- 这仅适用于全局临时表还是局部临时表?一个在会话外部不可见的表(在后一种情况下)会阻止另一个会话同时执行,这似乎很奇怪。
- 什么才算是“命名约束”?并非所有约束都具有名称(即使它们是系统生成的)?这是否指的是具有用户定义别名的约束?对我来说,这似乎是措辞不好。
- “多个用户”实际上意味着多个会话吗?这些过程是通过使用单个服务帐户的应用程序调用的,因此99.9%的脚本调用是由该单个帐户进行的(对于管理员偶尔在后端进行的调用,我并不担心)。如果服务帐户可以同时在多个会话中运行该存储过程,那么出于我的目的,这个问题就没有意义了。