简短的回答是:
临时表的隔离是保证每个查询,并有 没有什么可担心的线程,锁或 并发访问。
我不知道为什么在这里回答说说“关系”和线程,因为这些的意义是编程的概念,而查询隔离在数据库级别处理。
本地临时对象在SQL服务器中被会话分开。如果你有两个同时运行的查询,那么它们是两个完全独立的会话,不会互相干扰。登录无关紧要,例如,如果您使用ADO.NET使用单个连接字符串(这意味着多个并发查询将使用相同的SQL Server“登录”),那么您的查询将全部仍在单独的会话中运行 。连接池也无关紧要。本地临时对象(表和存储过程)完全不会被其他会话看到。
澄清这是如何工作的;虽然您的代码具有本地临时对象的单一通用名称,但SQL Server会在每个会话中为每个对象附加一个唯一字符串,以使它们保持分离。
CREATE TABLE #T (Col1 INT)
SELECT * FROM tempdb.sys.tables WHERE [name] LIKE N'#T%';
你会看到类似的名称如下:您可以通过运行在SSMS下面看到这个
T_______________00000000001F
然后,而不关闭该查询选项卡,开辟了新的查询选项卡并粘贴到相同的查询中并再次运行。您现在应该看到类似以下内容:
T_______________00000000001F
T_______________000000000020
因此,每个代码引用#T时,SQL Server将其转换为基于会话的正确名称。分离都是自动神奇地处理的。
如何从一个连接并行执行相同的进程? – SQLMenace 2009-01-21 21:03:11