17 我正在创建一个临时表(#myTable)并使用一个游标。当并发用户通过我的应用程序访问游标时,这是否会产生问题?它可以让我创建具有相同名称的单独的临时表吗? 以下是示例代码: Open cursor; Fetch Next from cursor into @Variable_Temp_Table_Name; Create table #myTable(pk int) While @@Fetch_Status = 0 Begin Fetch Next from cursor into @Variable_Temp_Table_Name; End sql-server cursors — 苏吉思·卡里维利 source
20 SQL Server总是在临时表名称的末尾(在幕后)附加一些随机数,当并发用户在其会话中使用相同名称创建临时表时,SQL Server将在tempdb中创建多个临时表。 我#TempTable在SSMS中的三个不同的会话中创建了3个临时表,现在,如果我转到tempdb,我可以看到在其中创建的临时表,其中在每个临时表的名称后附加了一个随机(唯一)字符串。 — 马里 source
11 是的,多个应用程序将获得自己的#temp表副本。这就是使用#temp表的意义,因为每个并发会话都有自己的隔离对象。这与是否将游标与#temp表结合使用无关(尽管我怀疑仍然不需要游标-您没有包含足够的代码来特别注释)。 编辑以包含评论: 关于使用#temp表的另一件事是,如果需要向它们添加约束,则让SQL Server生成该名称,否则即使该表对于会话是唯一的,约束也不会,第二个实例将错误地创建该表。表。 — 亚伦·伯特兰 source 7 关于使用#temp表的另一件事是,如果需要向它们添加约束,则让SQL Server生成该名称,否则即使该表对于会话是唯一的,约束也不会,第二个实例将错误地创建该表。表。 — 亚伦 1 @Aaron-建议您将对未命名约束的评论移到答案中。很多人搞砸了这个细节。 — RLF 2015年 还要注意,如果有人确实想要全局临时表,则可以对其进行声明##likeThis。 — underscore_d @RLF和Aaron:始终可以使用NEWID()生成GUID并通过Dynamic SQL创建约束。并不是说这和在CREATE TABLE语句中包括它一样干净,但这至少是一个选择。而且我还认为,临时表上不允许FK约束(只要我们一般地讲约束)。 — 所罗门·鲁兹基 @srutzky-正确,但是通常命名命名约束,以便于从代码中轻松引用它们。使用NEWID()不会提供这种简化,尽管您可以根据需要查询以找到NEWID。 — RLF