如何解决如何在SQL Server扩展事件中分别跟踪游标语句?
我想使用扩展事件将语句跟踪到SQL Server游标中,但是在Internet上找到的所有解决方案都不起作用-例如this。
测试代码:
DECLARE @objectId int;
DECLARE cur CURSOR LOCAL FORWARD_ONLY STATIC READ_ONLY
FOR
SELECT TOP(3) object_id
FROM sys.tables AS t
ORDER BY object_id;
OPEN cur;
FETCH NEXT FROM cur INTO @objectId;
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRAN;
SELECT @objectId AS object_id;
WAITFOR DELAY '00:00:01';
COMMIT;
FETCH NEXT FROM cur INTO @objectId;
END;
CLOSE cur;
DEALLOCATE cur;
解决方法
如果您希望使用扩展事件跟踪 SQL Server 游标及其内部语句,您可以从库中选择以下事件:
-
sqlserver.cursor_manager_* 事件
使用它们来捕获 TSQL 光标 -
sqlserver.cursor_* 事件
使用它们来捕获 API 光标
在您的示例中,您使用的是 TSQL 游标。
这是一个用于捕获 TSQL Cursor 打开/关闭事件的扩展事件会话脚本示例。
它将捕获由测试代码中声明的 TSQL 游标触发的事件。
注意:我还必须捕获事件 sqlserver.sql_statement_completed,以便从游标内执行语句。 >
#include <iostream>
#include <string>
class user1 {
public:
const std::string username1;
user1(std::string Myfirstname,std::string emailaddress,std::string); //constructor
private:
std::string email;
std::string mobile;
};
user1::user1(std::string Myfirstname,std::string): username1(Myfirstname),email(emailaddress) {}
int main() {
user1 firstman {"John","john1@email.com","011000000"};
std::cout << "Created " << firstman.username1 << " !\n";
}
以下是测试查询的结果(在 SQL Server 2019 和 2014 上测试):
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。