如果我为sqlserver准备两次相同的语句 - 将sqlserver准备两次还是使用第一个?

时间:2014-01-16 14:59:07

标签: sql-server adodb

如果我两次准备相同的语句,有人可以告诉我SQL Server会做什么。

是否再次准备或使用第一次准备中的“编译”?

我有以下可能多次调用的函数:

function prepareStoredProcedure (spName, arrParams)
{
var cmd = Server.CreateObject("ADODB.Command")
cmd.CommandType = adCmdStoredProc;
cmd.ActiveConnection = Connection;
cmd.CommandText = spName;
cmd.Prepared = true;

var params = [];
for (var i=0; i<arrParams.length; i++)
{
if (arrParams[i].Size)
  params.push(cmd.CreateParameter(arrParams[i].Name, arrParams[i].Type, 1, arrParams[i].Size)); // Name, Type, Direction, Size
else
  params.push(cmd.CreateParameter(arrParams[i].Name, arrParams[i].Type, 1));

cmd.Parameters.Append(params[i]);
}

return cmd;
}

我正在使用sql server 2008,2008 R2和2012

1 个答案:

答案 0 :(得分:1)

它将使用第一个编译版本。

在重新执行方面还有其他细微差别。例如,根据存储过程,SQL Server可能(并且希望能够使用)缓存的查询计划。但是,如果存在动态SQL,某些类型的逻辑或大数据更改(以及其他内容),则数据库引擎将需要重建查询计划。

但是存储过程'编译'是在创建时完成的。除非您指定其他方式(参见here),否则它将不会重新编译。