在SQL Server中异步创建临时表

在SQL Server中异步创建临时表,sql,sql-server,asynchronous,Sql,Sql Server,Asynchronous,我目前正在尝试确定从web应用程序创建临时表可能存在的问题,以及SQL Server如何自然地确定单独的会话 SELECT blabla, lala FROM table INTO #TempTable SELECT blabla FROM #TempTable DROP TABLE #TempTable 在上面的例子中,当web应用程序的一个用户正在等待第二行执行,而另一个用户触发相同的3行时,如何确定第二个用户获得的对象是否已经存在,或者是否为该用户创建了一个新的诱惑 如果每个用户都在同一

我目前正在尝试确定从web应用程序创建临时表可能存在的问题,以及SQL Server如何自然地确定单独的会话

SELECT blabla, lala FROM table INTO #TempTable
SELECT blabla FROM #TempTable
DROP TABLE #TempTable
在上面的例子中,当web应用程序的一个用户正在等待第二行执行,而另一个用户触发相同的3行时,如何确定第二个用户获得的对象是否已经存在,或者是否为该用户创建了一个新的诱惑

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


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

与数据库的每个用户连接都是它自己的会话。即使在SQL Server中使用连接池,这些会话也是唯一的。在幕后,SQL Server会为每个诱惑添加一个会话引用号,因此在执行过程中,它们在技术上甚至不会被命名为相同的东西

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

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

到数据库的每个用户连接都是它自己的会话。即使在SQL Server中使用连接池,这些会话也是唯一的。在幕后,SQL Server会为每个诱惑添加一个会话引用号,因此在执行过程中,它们在技术上甚至不会被命名为相同的东西

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

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

SQL Server不确定单独的会话。 它是一个创建会话的客户端应用程序。您可以编写一个应用程序,在该应用程序中,数据库的所有流量都使用单一连接,但这并不容易,或者为每个页面创建一个单独的连接。这两种解决方案都很糟糕。 在正确的设计中,您应该使用连接池,并且您的代码应该根据需要保留连接池中的连接。
即使您使用的是连接池,也可能每个命令都是在与池不同的连接上执行的。

SQL Server不确定单独的会话。 它是一个创建会话的客户端应用程序。您可以编写一个应用程序,在该应用程序中,数据库的所有流量都使用单一连接,但这并不容易,或者为每个页面创建一个单独的连接。这两种解决方案都很糟糕。 在正确的设计中,您应该使用连接池,并且您的代码应该根据需要保留连接池中的连接。
即使您正在使用连接池,也有可能在与池不同的连接上执行每个命令。

临时表被创建并存储在数据库中,直到它们被删除为止,当您可以使用用户传递的特定参数从数据库表中进行选择时,为什么还要费心创建一个临时表呢?在实际的web应用程序中,我必须返回一个庞大的计数数组,每个计数都需要一个单独的查询,所有查询都具有类似的连接和几个不同的WHERE语句。我创建了一个包含所有连接和内容的临时表,并对临时表进行了WHERE检查,以避免重复执行100多次连接。然而,我尝试使用我的web应用程序使该表保持打开状态,然后在其他浏览器中运行查询,但计数没有返回。我试图弄清楚SQL Server使用什么来确定单独的会话,无论是IP地址还是MAC地址,etc@mewi您的最后一条评论应该提到一个错误-无法在创建本地临时表的会话之外访问本地临时表。如果没有发生错误,那么您必须使用全局临时表-差异非常显著。我得到的是一个对象已经存在错误创建临时表并存储在数据库中,直到它们被删除,当您可以使用用户传递的特定参数从数据库表中进行选择时,为什么还要费心创建一个临时表呢?在实际的web应用程序中,我必须返回一个庞大的计数数组,每个计数都需要一个单独的查询,所有查询都具有类似的连接和几个不同的WHERE语句。我创建了一个包含所有连接和内容的临时表,并对临时表进行了WHERE检查,以避免重复执行100多次连接。然而,我尝试使用我的web应用程序使该表保持打开状态,然后在其他浏览器中运行查询,但计数没有返回。我试图弄清楚SQL Server使用什么来确定单独的会话,无论是IP地址还是MAC地址,etc@mewi您的最后一条评论应该提到一个错误-无法在创建本地临时表的会话之外访问本地临时表。如果没有发生错误,那么您必须使用全局临时表-差异非常显著。我得到的对象已存在错误是否可能
r有人从同一网络上的另一台计算机访问web应用程序,并与网络上的其他人成为同一用户连接的一部分吗?不,即使在同一台计算机上,web应用程序在不同浏览器中打开,也会创建一个新的独特会话,其中包含一组临时表。另外,请尝试我在看到您提到对象已存在错误后添加的代码段。是否有人可以从同一网络上的其他计算机访问web应用程序,并与网络上的其他人成为同一用户连接的一部分?否,即使是在完全相同的计算机上,在不同的浏览器中打开web应用程序,也会创建一个具有自己的临时表集的新的唯一会话。另外,请尝试我在看到您提到对象已存在错误后添加的代码段。