2013-06-03 82 views
1

用户登录到他的系统并打开我的程序后,他可以根据他的WindowsUsername从数据库中看到数据(我为此写了一个存储过程)。很多用户可以用TempTable打开一个SP吗?

此数据来自带有临时表(#temp)的查询。我的问题是现在,如果许多用户使用这个程序,打开它之后,他们都会尝试在存储过程中构建#temp表。这甚至有可能吗?因为如果我尝试使用相同名称构建一个tempTable,服务器会给我一个错误。根据登录的用户,我是否需要给动态TempTable名称?还是有更好的选择? MS-SQL服务器

+0

我们在这里讨论的是什么RDBMS? –

+0

我正在使用ms sql-server – ruedi

回答

0

如果它是一个存储过程(SP)中的真实临时表,那么临时表将在SP执行期间创建/仅存在。如果sp由多个用户同时运行多次,临时表将被多次创建并存储在每个用户的内存空间中。

返回给每个用户的结果将是唯一的,临时表的每个副本都不会看到来自其他sp调用的临时表。

如果您在查询窗口中通过两次创建临时表进行测试,则会出现错误。

为了证明上述工作安排SP在运行两次的同时传递不同的用户ID。你会得到两个不同的结果集。

2
  • 本地临时表(一个#TableName)为每个会话/连接
  • 许多用户不能共享一个会话/连接

因此,本地临时表存储过程是5月并发用户

在您使用全局临时表(##TableName)另一方面安全那么它是世界+狗

可见

MSDN(我的粗体)

有两种类型的临时表:local和global。 本地临时表只有在与SQL Server实例处于同一连接期间才会与其创建者一样可见,这与表首次创建或引用时相同。在用户从SQL Server实例断开连接后删除本地临时表。创建全局临时表后,任何用户和任何连接都可以看到全局临时表,并且当引用表的所有用户断开与SQL Server实例的连接时,全局临时表将被删除。

相关问题