我有一个创建并打开一些游标的存储过程。它会在最后关闭它们,但是如果遇到错误,则这些游标将保持打开状态!然后尝试运行游标时,后续运行将失败,因为具有该名称的游标已经存在。
有没有一种方法可以查询存在的游标以及它们是否打开,因此我可以关闭并取消分配它们?我觉得这比盲目地尝试关闭和吞并错误要好。
问题来源于stack overflow
可以在2008R2上运行,还没有测试过:
USE MASTER GO select s.session_id, s.host_name, s.program_name, s.client_interface_name, s.login_name , c.cursor_id, c.properties, c.creation_time, c.is_open, con.text, l.resource_type, d.name, l.request_type, l.request_Status, l.request_reference_count, l.request_lifetime, l.request_owner_type from sys.dm_exec_cursors(0) c left outer join (select * from sys.dm_exec_connections c cross apply sys.dm_exec_sql_text(c.most_recent_sql_handle) mr) con on c.session_id = con.session_id left outer join sys.dm_exec_sessions s on s.session_id = c.session_id left outer join sys.dm_tran_locks l on l.request_session_id = c.session_id left outer join sys.databases d on d.database_id = l.resource_database_id
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。