首页 > 解决方案 > SQL Server - 在 SSMS 中关闭查询窗口后,全局范围的临时过程立即消失

问题描述

我正在尝试从服务器上获取一些数据,而我只有在使用尚未在那里推广的分析存储过程时才具有读取权限,所以我像手动使用它一样

CREATE PROCEDURE ###MyProcedure

然后在另一个查询窗口中,我可以很好地运行新的临时过程。但是,当我关闭具有创建语句的查询窗口时,临时过程就消失了。更糟糕的是,有多个子例程需要我用打开的查询窗口向我的工作区发送垃圾邮件才能使用这种方法。

我认为保留全局范围的临时对象,直到所有引用连接都关闭。SSMS 中查询窗口之间的连接详细信息(使用 F4 属性选项卡)的唯一区别是 SPID,但我看到相同的连接名称。

标签: sql-serverssms

解决方案


这是使用本地和全局存储过程的已知特性;它们仅在连接存在时才存在。由于每个查询窗口都使用自己的连接,因此当它们的定义查询窗口关闭时,过程将被删除。

而不是使用CREATE PROC ##YourSP...Try making it persistent in tempdb: CREATE PROC tempdb.dbo.YourSP...。然后它将一直持续到 SQL Server 重新启动(因为每次启动服务时都会重建 tempdb)。

编辑:如果您使用的是 SQL Server 2016+,您也可以改为使用...如果服务尚未重新启动,CREATE OR ALTER PROC这将停止生成错误;CREATE因此SP还没有丢失。


推荐阅读