C# 如何在SQLServerManagementStudio中拦截执行

C# 如何在SQLServerManagementStudio中拦截执行,c#,sql-server,visual-studio,ssms,vsix,C#,Sql Server,Visual Studio,Ssms,Vsix,我正试图找到如何在SQLServerManagementStudio中拦截查询执行的指导原则 例如:我想在“执行”按钮点击后检查查询WHERE子句。 我已经用VSIX项目在VS19中创建了加载项。 如果查询中包含WHERE子句,我想停止查询,仅用于我自己的登录,并且仅用于SQL Server Management Studio。 我应该捕获按钮单击,还是可以通过拦截内部SSMS命令来完成 如有任何建议,将不胜感激 您可以使用SQL Server Profiler捕获SQL跟踪数据和执行的SQL语

我正试图找到如何在SQLServerManagementStudio中拦截查询执行的指导原则

例如:我想在“执行”按钮点击后检查查询
WHERE
子句。
我已经用VSIX项目在VS19中创建了加载项。

如果查询中包含
WHERE
子句,我想停止查询,仅用于我自己的登录,并且仅用于SQL Server Management Studio。
我应该捕获按钮单击,还是可以通过拦截内部SSMS命令来完成


如有任何建议,将不胜感激

您可以使用SQL Server Profiler捕获SQL跟踪数据和执行的SQL语句-在SSMS中,转到工具->SQL Server Profiler

网上有很多关于捕获内容的视频和教程,但一般来说,如果您使用的是标准模板,您应该能够执行以下操作

  • 准备好您的开发环境,并点击按钮
  • 启动探查器跟踪。提示:您应该“启用跟踪停止时间”,以防应用程序或其他东西锁定您的UI
  • 单击执行SQL的按钮
  • 停止追踪
您要查找的SQL应该列在跟踪中

注意事项:

  • 概要文件跟踪会影响SQL性能-限制跟踪时间,尤其是在它会影响其他人的情况下
  • 如果您针对的SQL server不在本地计算机上运行,则可能无法运行跟踪(由于安全设置)
  • 标准模板捕获了大量事件。准备搜索
  • 一旦掌握了窍门,就可以取消选中不需要的跟踪数据并筛选特定信息

您能描述一下在截获执行后您打算做什么吗?
我开发了SSMSBoost外接程序,我们在没有WHERE或“TRUNCATES”的情况下拦截执行。如果对其他用户有用,也许我们可以添加您想要的功能。

您想停止查询,还是可以在执行后对其进行分析?您想拦截来自所有登录名的所有查询,还是只拦截您自己的查询?您想只截取来自SSM或任何其他来源的查询吗?如果您想查看所有内容,查询量可能会很大。如果查询中包含Where子句,我想停止查询,仅用于我自己的登录,并且仅用于SSMS。据我所知,我可能需要订阅execute事件,但我不知道如何捕获它以及是什么触发它。因此,如果捕获我想要的事件,我的下一步将以某种方式订阅此事件,读取环境变量并更改它。你们知道吗,我可以在我的VSIX项目中把工具栏添加到SSMS中吗?我把你们的问题重读了好几遍,觉得我误解了。现在,我认为您正在尝试创建一个SSMS扩展,它查看您试图运行的查询,以查看其中是否有WHERE子句。如果是这样,您希望在执行SQL语句之前对其执行其他工作。这是正确的吗?如果我的更新查询没有WHERE子句,它应该给出一条类似“您想在没有WHERE的情况下继续此操作吗?”的消息。在用户单击“是”或“否”之前,它不会执行。我不知道您是否可以,但如果您可以共享一些代码示例,例如如何拦截执行按钮单击,或者只共享用于执行的一般思想和库/工具/vsix方法,那将是非常棒的。此功能已存在于SQL Server Management Studio的SSMSBoost中。(致命行动守卫)我们目前没有Visual Studio的单独版本,但我们计划创建它。然而,最有可能的是,大约60%的钩子和特性必须重新实现。