我在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
我不确定问题是什么或从哪里开始。
答案 0 :(得分:1)
直接调用SP和从.NET代码调用SP的问题可能是由于参数嗅探。 SQL Server可能会缓存执行计划,该计划对于您从代码传递的参数不是最佳的。
为避免这种情况,请尝试将WITH RECOMPILE添加到SP定义中,例如
CREATE PROCEDURE MySP (
... parameters...
) WITH RECOMPILE
AS
BEGIN
...
答案 1 :(得分:0)
如果您的存储过程需要使用nvarchar并使用varchar,则可能会出现问题。 SQL服务器将接受参数但将被强制执行转换。你有更多具体细节吗?