2

我的 win-form 应用程序中有一个奇怪的问题,我正在调用存储过程,执行大约需要 6 秒。(此存储过程接受多个参数,包括一个输出参数)

从我使用的应用程序级别:

Dim dt1 = DateTime.Now
cmd.ExecuteNonQuery()
MessageBox.Show(DateTime.Now.Subtract(dt1).Seconds)

这大约是 5-6 秒

我已经尝试使用相同的参数运行相同的存储过程,sql-server并且它不需要时间来执行:

declare @val decimal
exec mysp 'value1','value2','value3','value4',@val out 
select @val

我不确定问题是什么或从哪里开始。

4

2 回答 2

1

直接调用 SP 和从 .NET 代码调用 SP 之间存在差异的问题,可能是由于参数嗅探。SQL Server 可能会缓存对于您从代码传递的参数而言并非最佳的执行计划。

为避免这种情况,请尝试将 WITH RECOMPILE 添加到您的 SP 定义中,例如

CREATE PROCEDURE MySP (
    ... parameters...
) WITH RECOMPILE

AS

BEGIN
   ...
于 2013-09-09T17:59:36.683 回答
0

如果您的存储过程需要说 nvarchar 并且您使用 varchar,这可能是一个问题。SQL Server 将接受参数,但将被迫进行转换。你有更多的细节吗?

于 2013-09-10T00:21:17.573 回答