0

我有一个以两种方式编写的查询。一旦像这样:

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 分钟,而第二种方式大约需要 20 秒。到底是怎么回事!?我一直在尝试研究类似的问题,并且不断看到有关查询缓存的事情,但通常是因为人们不是以第一种方式这样做,他们只是在 nvarchar 上执行 exec。

我对 SQL 非常缺乏经验,完全迷失了方向。任何帮助都会很棒。

我这样做的原因是我从 C# 调用存储过程并将其传递给参数。

4

1 回答 1

0

如果您使用的是 SSMS,则可以选择显示查询的执行计划。看一下,看看每种情况有什么不同。

我对您采用第一种方式的原因感到困惑...... sp_executesql 是您存储过程的一部分吗?或者您只是想从 SSMS 模拟存储过程?

于 2013-03-18T14:06:41.943 回答