我有一个创建临时表的存储过程。仅在此存储的过程的范围内需要它,而在其他地方则不需要。
当我使用临时表列出时,我总是检查临时表是否存在,如果存在,则将其删除,然后在存储过程中创建它。 IE。:
IF OBJECT_ID('tempdb..#task_role_order') IS NOT NULL
DROP TABLE #task_role_order
CREATE TABLE #task_role_order(...)
在大多数情况下,除了在创建临时表之前,还是删除临时表后,这是最佳实践吗?
如果需要更多上下文,则可以使用.NET Web API后端,该后端调用数据库中存储的proc。我相信当SQL Server session 结束时,SQL Server会删除临时表。但是我不知道.NET是在每次查询数据库时打开一个新的SQL Server session ,还是在每个应用程序生命周期中仅打开一次,等等。
我已经阅读了similar question,但认为它略有不同。
最佳答案
通常,只要您不再需要资源,就可以释放资源。因此,我将在存储过程的末尾添加DROP TABLE。
只要连接存在,临时表就存在。通常,应用程序使用连接池(可配置),并且在调用Connection.Close时连接不会关闭。在重新使用连接之前,客户端将执行特殊的存储过程(sp_reset_connection),该过程执行所有清理任务。因此,在任何情况下,临时表都将被删除,但有时会有些延迟。
关于sql-server - 除了在创建临时表之前,还是在使用后删除临时表,这是最佳实践吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28905384/