返回顶部
首页 > 资讯 > 数据库 >怎么写出易调试的SQL
  • 279
分享到

怎么写出易调试的SQL

2024-04-02 19:04:59 279人浏览 独家记忆
摘要

这篇文章主要介绍了怎么写出易调试的sql,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.前言相比高级语言的调试如C# , 调试SQL是件痛

这篇文章主要介绍了怎么写出易调试的sql,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

1.前言

相比高级语言的调试如C# , 调试SQL是件痛苦的事 . 特别是那些上千行的存储过程, 更是我等码农的噩梦.

在将上千行存储过程的SQL 分解到 C# 管理后, 也存在调试的不通畅, 如何让调试流畅些呢

2.常见调试

2.1 通常在Dapper 里面一个断点下去, 抓到类似如下SQL:

SELECT  a.*  FROM  dbo.ptype a  INNER JOIN dbo.PType_Price b ON a.typeId=b.PTypeID  LEFT JOIN dbo.PType_Units c ON a.typeId=c.UnitsId  WHERE a.typeId=@typeid AND a.CreateDate=@Area  AND preprice1=@preprice1 AND deleted=@deleted

各种@符号, 需要手工替换后才能调试(麻烦), 要是能抓到最终SQL就好了

2.2 庆幸的是可以通过SQLServer Profiler 来抓到最终SQL

怎么写出易调试的SQL

但是生产环境中的SQLServer, 并发执行的SQL 非常多, 如上图所见, 在一大堆SQL 里面找到你刚才执行的SQL也比较麻烦, 即使可以Ctrl  + F 调出搜索框来搜索, 也要想个好的关键字来搜索 , 麻烦.

3.解决方案

既然我们想要最终的SQL , 为毛不在丢给Dapper 执行前, 就已经是最终SQL了呢, 上工具代码:

public class SqlHelper      {             public Dictionary<string, object> Param = new Dictionary<string, object>();             public string ReplaceParam(ref string sql)          {              if (Param.Count == 0)              {                  return sql;              }                 StringBuilder sb = new StringBuilder();              sb.Append(sql);              foreach (var item in Param)              {                  var paramName = item.Key;                  var paramValue = item.Value;                  var type = paramValue.GetType();                  if (type == typeof(string) || type == typeof(DateTime))                  {                      //字符串                      sb.Replace($"@{paramName}", $"'{paramValue}'");                  }                  else if (type == typeof(bool))                  {                      //bool 类型                      if (paramValue.ToString() == "True")                      {                             sb.Replace($"@{paramName}", "1");                      }                      else                      {                          sb.Replace($"@{paramName}", "0");                      }                  }                  else                  {                      //数值                      sb.Replace($"@{paramName}", paramValue.ToString());                  }              }                 sql = sb.ToString();              return sql;          }      }

调用示例:

public IEnumerable<Ptype> GetPtypeDetail()          {              var sql = @"  SELECT a.*  FROM  dbo.ptype a  INNER JOIN dbo.PType_Price b ON a.typeId=b.PTypeID  LEFT JOIN dbo.PType_Units c ON a.typeId=c.UnitsId  WHERE a.typeId=@Typeid AND a.CreateDate=@CreateDate  AND preprice1=@preprice1 AND deleted=@deleted     ";              var sqlHelper = new SqlHelper();                 sqlHelper.Param.Add("Typeid", "001");              sqlHelper.Param.Add("CreateDate", DateTime.Now);              sqlHelper.Param.Add("preprice1", 3.62M);              sqlHelper.Param.Add("deleted", true);              sqlHelper.ReplaceParam(ref sql);                 IEnumerable<Ptype> plist = new List<Ptype>();              using (var con = SQLServerHelper.GetConnection())              {                  plist = con.Query<Ptype>(sql);              }                 return plist;          }

这样丢给Dapper 执行的SQL 始终是最终SQL, 就不用煞费苦心去抓了.

PS: 有人可能会质疑这样替换的效率,不用担心已测试 , C#的字符串替换是非常快的, 上面的调用实例, 当时的测试结果是 微妙和纳秒级别,  有兴趣的看管可以再测试.

4. ***

现在丢给Dapper执行的不再是 充满@参数的SQL , 而是一个替换好的最终SQL.

这样当老板隔老远吼道你说: 小蒋, 你tm 有个XX bug ,赶紧看看.

你可以不慌不忙的在 Dapper Query处打个断点

怎么写出易调试的SQL

鼠标放在SQL变量上, 轻松的拿到最终SQL进行调试, 而不是, 手动去替换@参数, 又或则在SQLServer Profiler  里面大海捞针了!!!

感谢你能够认真阅读完这篇文章,希望小编分享的“怎么写出易调试的SQL”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网数据库频道,更多相关知识等着你来学习!

您可能感兴趣的文档:

--结束END--

本文标题: 怎么写出易调试的SQL

本文链接: https://lsjlt.com/news/63670.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么写出易调试的SQL
    这篇文章主要介绍了怎么写出易调试的SQL,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.前言相比高级语言的调试如C# , 调试SQL是件痛...
    99+
    2024-04-02
  • MyBatis动态SQL语句的编写与调试
    MyBatis是一个支持动态SQL语句的持久层框架,可以根据不同的条件来动态生成SQL语句,从而实现灵活的数据库操作。下面是关于My...
    99+
    2024-05-08
    MyBatis
  • thinkphp中SQL调试怎么用
    小编给大家分享一下thinkphp中SQL调试怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!说明在模型操作中 ,...
    99+
    2024-04-02
  • sql存储过程怎么调试
    调试 sql 存储过程的步骤:启用输出调试信息;设置断点;调试存储过程;检查调试信息;逐步执行代码;查看局部变量;修复错误并重新调试。 SQL 存储过程调试指南 如何调试 SQL 存储...
    99+
    2024-05-30
  • sql怎么调出输入窗口
    通过以下步骤调出 sql 输入窗口,以便编写和执行查询:1. 打开数据库管理工具;2. 连接到数据库;3. 创建新查询窗口;4. 输入 sql 查询;5. 执行查询;6. 查看结果。 ...
    99+
    2024-05-14
    mysql
  • SQL语句导入导出怎么写
    这篇文章给大家分享的是有关SQL语句导入导出怎么写的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。SQL语句导入导出大全 SELECT cast(cast(科目编号 as...
    99+
    2024-04-02
  • sql server2008中怎么调试存储过程
    本篇文章给大家分享的是有关sql server2008中怎么调试存储过程,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。方法如下1、创建所需要调...
    99+
    2024-04-02
  • 基于Java怎么编写简易的算式测试程序
    这篇文章主要介绍“基于Java怎么编写简易的算式测试程序”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于Java怎么编写简易的算式测试程序”文章能帮助大家解决问题。1.程序功能这个程序可以自动生成...
    99+
    2023-06-30
  • PL/SQL的调试技术是什么
    PL/SQL的调试技术主要有以下几种: 使用DBMS_OUTPUT包:通过在代码中插入DBMS_OUTPUT.PUT_LINE语...
    99+
    2024-05-08
    PL/SQL
  • VS2003调试Debug出现的问题该怎么分析
    VS2003调试Debug出现的问题该怎么分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。昨天下午机器上同时安装VS2003和 VS2005,但是出现了机器老要死机的问题...
    99+
    2023-06-17
  • python调用易语言编写的dll文件
     目前易语言编写的dll文件都是32位的dll,所以必须用32位的python去调用。     32位的dll必须用32位的python调用,64位的dll必须用64位的python调用。 原因如下:     在64位的windows系统...
    99+
    2023-01-31
    文件 易语言 python
  • Navicat中怎么设置SQL查询的断点和调试
    Navicat并不支持SQL查询的断点和调试功能。Navicat是一个数据库管理工具,主要用于连接、管理和操作数据库,而不是用于编写...
    99+
    2024-05-10
    Navicat
  • PyCharm怎么debug调试_PyCharm调试debug的方法
    首先,进行打开一个需要进行调试的代码,进行再当前来进行编辑。 在当前的代码进行编辑的完成,进行点击 run 菜单。 进行点击了run之后,弹出了下拉菜单选中为 debug 的选项。 ...
    99+
    2024-05-10
    pycharm
  • SQL调优怎么生成海量测试数据
    小编给大家分享一下SQL调优怎么生成海量测试数据,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!场景,如果出现慢SQL,需要DBA...
    99+
    2024-04-02
  • Python中怎么实现调试器调试
    今天就跟大家聊聊有关Python中怎么实现调试器调试,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。PyDev 就能显示出一个超链接,这样您可以在导入库或函数的源代码之间导航。请注意,...
    99+
    2023-06-17
  • sql中不等于某个条件怎么写出来的
    sql 中不等于某个条件可使用 not condition。例如:不等于某个值:where column_name value;不等于列表中的值:where col...
    99+
    2024-05-02
  • 写出高性能sql的方法
    小编给大家分享一下写出高性能sql的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先要搞明白什么叫执行计划?执行计划是数据...
    99+
    2024-04-02
  • golang怎么调试
    goland中调试的方法:1、golang软件并新建一个项目;2、编写一个完整的go代码;3、使用鼠标在代码前点击插入断点;4、右键选中新建的goland项目;5、选择“Debug”→“go build goexample”;6、最后使用【...
    99+
    2024-04-02
  • javascript怎么调试
    javascript怎么调试?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。调试javascript的方法:1、console.log() 方法如果浏览器支持调试,你可以使用...
    99+
    2023-06-14
  • html怎么调试
    HTML是一种用于网页开发的标记语言,但在开发网页时会遇到许多问题,像是页面崩溃,无法加载或样式受损等。这些问题需要在开发过程中进行调试,本文将为您介绍一些HTML调试的方法。1、使用浏览器的控制台现代浏览器都提供了一个内置的控制台(con...
    99+
    2023-05-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作