目前,我正试图确定从web应用程序创建临时表时可能出现的问题,以及Server如何自然地确定单独的会话。
SELECT blabla, lala FROM table INTO #TempTable
SELECT blabla FROM #TempTable
DROP TABLE #TempTable在上面,当一个web应用程序的一个用户在等待第二行执行,而另一个用户触发相同的3行时,如何确定第二个用户是否得到一个“对象已经存在”,或者为该用户创建一个新的#TempTable。
如果每个用户都在同一网络上的另一台计算机上,SQL server是否会将其视为单独的会话,从而创建单独的临时表。
如果它在两个不同的网络上运行在同一台计算机上呢?
发布于 2019-05-06 18:30:34
到数据库的每个用户连接都是自己的会话。即使在Server中使用连接池,这些会话也是唯一的。在幕后,SQL Server用单个会话引用号追加每个#tempTable,因此在执行过程中,它们的名称在技术上甚至不相同。
如果问题的根源是有关调试时已经存在的对象的错误消息。在创建临时表之前,尝试添加下面的代码片段:
IF OBJECT_ID('[tempdb]..[#tempTable]') IS NOT NULL
BEGIN
DROP TABLE #tempTable
END发布于 2019-05-06 19:50:50
Server不确定单独的会话。
创建会话的是客户端应用程序。您可以编写一个应用程序,其中数据库的所有通信都使用单个连接(不太容易),或者为每个页面创建单独的连接(常见错误)。这两种解决方案都很糟糕。
在正确的设计中,您应该使用连接池,并且您的代码应该根据需要从连接池中保留连接。
即使使用连接池,每个命令也有可能在与池不同的连接上执行。
https://stackoverflow.com/questions/56010443
复制相似问题