我想知道是否有人可以更好地解释SQL中#tables的工作原理。
在我们的一个存储过程中,我们创建一个临时表(#table),其中数据由当前活动的存储过程存储。为了论证,我们可以称之为 Sproc1 。
Sproc1由 sproc2 调用。在调用之后,sproc2从#table收集数据,然后删除#table,因为它将不再需要。
理论上这一切都运作良好,但如果两个或二十个人在同一时间调用/执行sproc2会怎么样?
所以,我想知道SQL是否会为使用sproc2的每个调用者创建#table的新实例(通过连接链接),还是会发生冲突?
答案 0 :(得分:3)
这个问题有一些很好的回答可以回答你的问题。
答案 1 :(得分:2)
你应该没事。 #table
临时表仅对同一SQL会话中的调用可见。
可以找到一个很好的解释here。
答案 2 :(得分:1)
当您创建一个包含一个哈希标记的表时(如您的示例所示) - 只有创建它的连接才能访问它,并在连接关闭时自动删除。
如果您需要确保所有连接都能看到它,您可以使用全局临时表(## table),但在连接关闭时也会删除它们,因此请确保您不认为它存在于您的过程中。