0

私は2つの方法で書かれたクエリを持っています。このようにしたら:

declare @var1 int
declare @var2 int


set @var1 = 1
set @var2 = 50

declare @myQuery = nvarchar(max)
set @myQuery = 'INSERT INTO someTable
                @var1
                WHERE something = @var2'

EXEC sp_executesql @myQuery,
    N'@var1 int,
    @var2 int',

私も次のようなクエリを持っています:

declare @var1 int
declare @var2 int   
set @var1 = 1
set @var2 = 50

INSERT INTO someTable
@var1
WHERE something = @var2

私の実際のクエリは、はるかに長く複雑です。最初の方法は約 4 分、2 番目の方法は約 20 秒かかります。何が起こっている!?私は同様の問題を調査しようとしてきましたが、クエリのキャッシュに関することを見続けていますが、通常は、人々が最初の方法ではなく、nvarchar で exec を実行しているためです。

私はSQLにかなり慣れておらず、完全に迷っています。どんな助けでも素晴らしいでしょう。

最初の方法で行っている理由は、C# からストアド プロシージャを呼び出し、それをパラメーターで渡しているからです。

4

1 に答える 1

0

SSMS を使用している場合は、クエリの実行プランを表示するオプションがあります。それを見て、それぞれのケースで何が違うのかを見てください。

最初の方法を実行する理由に混乱しています... sp_executesql はストアド プロシージャの一部ですか? それとも、SSMS からストアド プロシージャをエミュレートしようとしているだけですか?

于 2013-03-18T14:06:41.943 に答える