2

ストアド プロシージャを呼び出している win-form アプリケーションに奇妙な問題があり、実行に約 6 秒かかります。(このストアド プロシージャは、1 つの出力パラメーターを含む複数のパラメーターを受け入れます)

私が使用したアプリケーションレベルから:

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 コードから呼び出す場合の違いに関する問題は、パラメーター スニッフィングが原因である可能性があります。SQL Server は、コードから渡すパラメーターに最適ではない実行計画をキャッシュしている可能性があります。

これを回避するには、WITH RECOMPILE を SP 定義に追加してみてください。

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

AS

BEGIN
   ...
于 2013-09-09T17:59:36.683 に答える
0

ストアド プロシージャがたとえば nvarchar を想定していて、varchar を使用する場合、問題になる可能性があります。SQL サーバーはパラメーターを受け入れますが、強制的に変換を行います。もっと具体的なことはありますか?

于 2013-09-10T00:21:17.573 に答える