我有两种方式的查询。一旦这样:
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#调用存储过程并将其传递给参数。
答案 0 :(得分:0)
如果您正在使用SSMS,则可以选择显示查询的执行计划。看一看,看看每种情况有什么不同。
我对你做第一种方式的原因感到困惑...是你的存储过程的sp_executesql部分吗?或者您只是试图模仿来自SSMS的存储过程?