我也谈谈 代码调用存储过程超时,SQL Server Management Studio里运行很快的问题

最近遇到了一个问题就是 一个执行速度很快的存储过程,在代码中调用的时候却超时了。

后来看到了两篇文章:

其中一篇是这样介绍的

今天同事用代码调用存储过程时超时,在SQL Server Management Studio里运行却很快就有结果,这和我上次遇到的情况一下,现在将解决方案记录如下,谨为大家作一提醒。 
解决方案就是: 把存储过程中多余的空格删掉。 
瞠目吧结舌吧,不过这就是现实,现实是残酷的,现实是无情的,哈哈 
不一定是哪个空格就引起了超时,试着看吧
 上面的解决方案是将存储过程里的空格去掉,但如果这样,存储过程的格式就不是很友好后期维护也是很麻烦。

痛定思痛,于是乎有了下面的解决方案:即然是在数据库里执行成功,所以在程序里构造一条如下的SQL执行            SqlParameter param = new SqlParameter("@project_id", project_id);

string selectCmd = string.Format("exec dbo.[***Get*ro*ctCo***] @project_id ", project_id);
            DataSet ds = this.ExecuteQuery(CommandType.Text, selectCmd, param);将存储过程的执行作为一条SQL传到数据库中执行。

OK,纠结的你,赶紧试试吧。。。

而第二篇道出了问题的本质:

立即在查询分析器上执行:

exec sp_recompile @objname=‘存储过程名称‘

由于存储过程是预编译的, 在第一次执行的时候, 会生成执行计划, 以后执行的时候, 会使用这个执行计划(除非存储过程侯或者显示指定重新编译), 而不是每次执行时都去生成执行计划。
当存储过程涉及的对象结构调整, 或者相关的数据产生了很大变化, 这可能导致原来的计划不适合当前的现状(执行计划过期), 这种情况下应该重新编译存储过程。

其实如果我们在存储过程中加上 with Recompile 也会达到同样的效果

时间: 2024-10-09 03:42:46

我也谈谈 代码调用存储过程超时,SQL Server Management Studio里运行很快的问题的相关文章

Microsoft OneScript 团队发布的最新一版在 SQL Server Management Studio 中运行的脚本,可以帮助我们获取更详细的版本信息。

该脚本有以下几点: 1. SQL Server 的主要版本.服务级别和版本类别 2. 已安装SP包.累计更新CU,历史更新的QFE\ GDR 3. 推荐当前SP包可以安装最新的CU,并给到相关资源地地址(这个很有帮助) 如Cumulative Update CU6 of SQL Server 2012 SP3. 4. 推荐可升级到其他产品,如: SQL Server 2014 Enterprise SQL Server 2014 Business Intelligence SQL Server

使用SQL Server Management Studio 创建数据库备份作业

SQL Server 作业无非就是按照规定的时间执行指定的脚本,这里介绍如何用SSMS(SQL Sever 2008)创建作业备份数据库. (0)假设在创建作业之前你所要备份的数据库已经存在:其次,你已经会启动SQL Sever 代理(一般是关闭的) (1)创建SQL Server代理作业 (1.1)新建作业,输出常规信息 如上图:输入作业名称(如:BackupJobTest),这里所有者和类别都是默认的,输入说明(就跟写代码要写注释一样,利人利己) (1.2)设置作业执行步骤 点击左边“选择页

教程:SQL Server Management Studio

此工具由 Microsoft Visual Studio, Management Studio 内部承载,它提供了用于数据库管理的图形工具和功能丰富的开发环境.通过 Management Studio,您可以在同一个工具中访问和管理数据库引擎.Analysis Manager 和 SQL 查询分析器,并且能够编写 Transact-SQL.MDX.XMLA 和 XML 语句.  学习内容 熟悉 Management Studio 的最好方式是进行实践演练.本教程将讲述如何管理 Managemen

Sql Server系列:Microsoft SQL Server Management Studio模板资源管理器

模板资源管理器是Microsoft SQL Server Management Studio的一个组件,可以用来SQL代码模板,使用模板提供的代码,省去每次都要输入基本代码的工作. 使用模板资源管理器的步骤: 1>. 打开Microsoft SQL Server Management Studio主界面之后,选择[视图]->[模板资源管理器],打开[模板浏览器]窗口. 2>. 模板资源管理器按代码类型进行分组,可以双击打开Database目录下的Create Database模板,查看如

推荐SQL Server Management Studio以及Visual Studio下的免费的插件 ApexSQL Complete

SQL Server 并没有代码格式化的工具,对于处理他人编写的长SQL需要手工的格式化是一件麻烦的事情. 推荐SQL Server Management Studio以及Visual Studio下的插件 ApexSQL Complete,ApexSQLRefactor,ApexSQLSearch ApexSQL Complete 跟踪的已经关闭大概的标签(需要在设置中启用才可生效的,会消耗一定的硬盘空间,推荐给开发狂人用,其实我举得还是标签少点比较好) 多个剪贴板 根据代码结构索引(可以少用

SQL Server Management Studio中:黑SQLCMD模式

注意: 这篇文章是专门针对人们已经熟悉了SQLCMD模式在SQL Server Management Studio中.虽然不是非常新颖的,读者应该明白SQLCMD文档中的基本功能. 若对DOS命令Shell有一个基本的了解,也将让你更好的理解下面这些例子. 步骤概述: 本文用于处理动态生成文件,虽然我们在同一个脚本中创建和运行文件,但是随着复杂度的提升结果将会难以预测.所以,公在允许意外丢失的情况下运行该例子. 不,SQLCMD我已经试过了... 如果你像我一样,你可能花了数年进出SQL Ser

SQL Server 2014 日志传送部署(4):SQL Server Management Studio部署日志传送

13.2.4 使用Management Studio部署日志传送 使用SQL Server Management Studio来部署日志传送步骤如下: (1)打开主服务器SQLSVR1中作为日志传送的主数据库DB01的属性页面,,然后选择"事务日志传送".选中"将此数据库启用为日志传送配置中的主数据库(E)"复选框. (2)点击"备份设置": 1.填写"备份文件夹网络路径"为\\192.168.1.20\backlog; 2.

How To : Create SQL Server Management Studio Addin

原文 How To : Create SQL Server Management Studio Addin Read the full and original article from Jon Sayce Here In the last post I talked about How To: Create Windows Live Messenger Addin Now let’s create SQL Server Management Studio Addin. Start: Let’s

[转]删除SQL Server Management Studio中保存的帐户信息

http://www.2cto.com/database/201208/149850.html 删除SQL Server Management Studio中保存的帐户信息 SQL Server 2005 Management Studio 删除以下路径中的mru.dat文件 2003/XP C:\Documents and Settings\Administrator\Application Data\Microsoft\Microsoft SQL Server\90\Tools\Shell\