如果我两次准备相同的语句,有人可以告诉我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
答案 0 :(得分:1)
它将使用第一个编译版本。
在重新执行方面还有其他细微差别。例如,根据存储过程,SQL Server可能(并且希望能够使用)缓存的查询计划。但是,如果存在动态SQL,某些类型的逻辑或大数据更改(以及其他内容),则数据库引擎将需要重建查询计划。
但是存储过程'编译'是在创建时完成的。除非您指定其他方式(参见here),否则它将不会重新编译。