千家信息网

怎么写出易调试的SQL

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍了怎么写出易调试的SQL,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.前言相比高级语言的调试如C# , 调试SQL
千家信息网最后更新 2026年11月02日怎么写出易调试的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

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

3.解决方案

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

public class SqlHelper      {             public Dictionary Param = new Dictionary();             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 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 plist = new List();              using (var con = SQLServerHelper.GetConnection())              {                  plist = con.Query(sql);              }                 return plist;          }

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

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

4. ***

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

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

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

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

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

篇文章 麻烦 C# 搜索 测试 上千 不用 兴趣 参数 字符 字符串 断点 过程 存储 微妙 流畅 痛苦 通畅 不慌不忙 大海捞针 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 咖啡 互联网加科技 互联网科技工作委员会 厦门中拓互联网络科技有限公司 互联网络科技有限公司 青岛互联网科技公司 中国互联网金融科技基金 卓越科技互联网 招聘 四个字互联网科技公司取名 成都铂石互联网科技做什么的 黑科技闪耀互联网之光 银川新华互联网科技学校联系电话 互联网行业科技股 雨阳互联网卡科技有限公司 富国互联网金融科技混合基金 厦门江牛科技互联网 吉林省码上互联网科技电话 艺电能源互联网科技有限公司招聘 张家口科技产业互联网平台 第三届互联网大会安防黑科技 厦门中拓互联网络科技有限公司 金融科技还是互联网 互联网扶贫科技 关于新基建和互联网科技 广州宏创互联网科技 广州凡科互联网科技 深圳天众互联网科技公司 深圳国际航运科技和互联网 开一家科技互联网公司需要多少钱 广州富喜互联网络科技
0