美文网首页
sql server存储过程搜索代码探索研究

sql server存储过程搜索代码探索研究

作者: 吉凶以情迁 | 来源:发表于2023-09-17 12:00 被阅读0次

心血来潮有想改进下工作效率,在代码开发过程中同事经常问这个错误是哪里触发的,这不是我写的我也只能一个一个调试定位到是哪个存储过程,于是想到了我之前的存储过程显示源码的玩意,又进行了改进,直接搜索存储过程内容。
切换到要搜索的数据库


SELECT  top 30 OBJECT_NAME(sm.object_id) AS ProcedureName,
       OBJECT_DEFINITION(sm.object_id) AS ProcedureDefinition,*
FROM sys.sql_modules AS sm
WHERE OBJECT_DEFINITION(sm.object_id) LIKE '%搜索的关键词%'

不过搜索后是一行显示,显然不行的,还需要开发一个工具,让他能完整显示每行,方便执行测试
于是整了个web版本

image.png

但是还是感觉不得劲,想开发zure data studio的扩展。
,但是开发思路是不知道怎么在存储过程的右键菜单插入,于是在azure data studio的扩展中进行搜索 search
原来有人做了类似的工具,支持缓存搜索和 热连接接搜索
不过操作交互不太舒服,是快捷键弹出对话框,选中了一个结果其他结果就看不到了,还不如我网页版的方便。
另外此插件的功能介绍:
缓存模式建议在打算改代码的模式不要使用,否则可能导致生产事故。
快捷键ctrl+t是缓存模式
ctrl+shift+t 无缓存模式
https://github.com/MikhailProfile/SearchEverywhere/issues

image.png

我的web版本实现逻辑也是很简单,因为用的 web core api,不打算套view,直接字符串拼接

    private static string FormatMultiResultAsHtml2(JArray arrs)
        {
            // 替换回车和换行符
            //sql = sql.Replace("\r", "").Replace("\n", "");

            // 构造 HTML 表格
            string html = "";
            for (int a = 0; a < arrs.Count; a++)
            {
                string title = arrs[a]["title"] +"";
                string contents = arrs[a]["content"]+"";
                int lineNum = 1;
                string linetag = "结果" + (a + 1);
                html += @"
             <div class=""result"" 
            <h3> " +title+"|"+ HttpUtility.HtmlEncode(linetag) + @"</h3>
            <p onclick=""toggleDetails(this)"">展开/收缩</p>
            <div class=""result-details"">
             <code> ";
                html += contents.Replace("\n", "<br>");
                //html += HttpUtility.HtmlEncode(contents.Replace("\n", "<br>"));
                html += @"</code>
            </div>
             </div>";


            }

            string html1 = @"
<!DOCTYPE html>
<html lang=""en"">
<head>
    <meta charset=""UTF-8"">
    <meta name=""viewport"" content=""width=device-width, initial-scale=1.0"">
    <style>
        .results-container {
            display: flex;
            flex-wrap: wrap;
        }
        .result {
            flex: 0 0 98%;
            margin: 2px;
            padding: 10px;
            border: 1px solid #ccc;
            cursor: pointer;
        }
        .result-details {
            display: none;
        }
    </style>
</head>
<body>
    <div class=""results-container"">
     " + html + @"
    </div>

    <script>
        function toggleDetails(element) {
            element = element.parentNode;
            var details = element.querySelector('.result-details');
            if (details.style.display === 'none' || details.style.display === '') {
                details.style.display = 'block';
            } else {
                details.style.display = 'none';
            }
        }
    </script>
</body>
</html>
";

            return html1;
        }

然后

   html = FormatMultiResultAsHtml2(ARR);
                html=html.Replace(content, "<font color='red'><b>" + content + "</b></font>");

            }

            // 返回 HTML 响应
            return Content(html, "text/html", Encoding.UTF8);

切换数据库问题,这个我尝试过似乎不能指定数据库只能直接切换数据库源了。
传递之前的连接字符串,然后进行修改设置回去。

       string dbname = JSONUtil.getStringValue(obj, "dbname", "").returnvalue;
                SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(strConn);
                builder.InitialCatalog = dbname;
                strConn = builder.ToString();

相关文章

网友评论

      本文标题:sql server存储过程搜索代码探索研究

      本文链接:https://www.haomeiwen.com/subject/yucwvdtx.html