SQL Server中的Temp Table的异步创建



我目前正在尝试确定从Web应用程序创建临时表以及SQL Server自然确定不同会话的可能问题。

SELECT blabla, lala FROM table INTO #TempTable
SELECT blabla FROM #TempTable
DROP TABLE #TempTable

在上面,当Web应用程序的一个用户正在等待第二行执行,而另一个用户则从相同的3行发射,而确定第二用户是否获得了"对象已经存在",否则为该用户创建新的#tempt。

如果每个用户都在同一网络上的单独计算机上,则SQL Server会将其视为单独的会话,从而创建单独的临时表。

如果它是在两个不同网络上的同一台计算机上运行的?

与数据库的每个用户连接都是自己的会话。即使您正在使用SQL Server中的连接池,这些会话也是唯一的。幕后,SQL Server将每个会话参考编号附加每个#tempts,因此在执行过程中,它们甚至没有将同一件事命名。

如果您的问题的根是有关在调试时已经存在的对象的错误消息。在创建临时表之前,请尝试在下面添加代码片段:

IF OBJECT_ID('[tempdb]..[#tempTable]') IS NOT NULL
BEGIN
    DROP TABLE #tempTable
END

sql Server不确定单独的会话。
这是创建会话的客户端应用程序。您可以编写一个应用程序,其中所有数据库的流量都使用单个连接(并非那么容易(,也可以为每个页面创建单独的连接(常见错误(。两种解决方案都很糟糕。
在适当的设计中,您应该使用连接池,您的代码应根据需要保留连接的连接。
即使您使用的是连接池,也有可能在与池的另一个连接上执行每个命令。

最新更新