1
sp_prepexec(sp_execute)与sp_executeSQL
问题的实质:实际的存储过程是实现临时表缓存的唯一机制,还是sp_executeSQL/ 等系统存储过程sp_execute也利用了它们? 我不是DBA,所以请少说话。我们的应用程序发送了准备好的语句,这些语句从探查器中运行,我看到它运行所有SQL,sp_prepexec这是同时运行sp_prepare和的系统过程sp_execute。我要尝试做的是弄清楚我是否从临时表缓存中受益。 我一直在使用带有object_id()的本指南来检查行为 https://sqlkiwi.blogspot.com/2012/08/temporary-tables-in-stored-procedures.html 然后,此博客文章上的第3点表明EXEC无法使用临时表缓存,但忽略了sp_executeSQL是否可以:http : //blogs.msdn.com/b/turgays/archive/2013/09/18/exec-vs- sp-executesql.aspx 在通过客户端发送的查询中,我创建了一个简单的临时表。 DECLARE @foo int; -- set by JDBC, unused but required to force a prepared statement SELECT 1 AS id INTO #tmp SELECT OBJECT_ID('tempdb..#tmp'); 在探查器中,我可以看到: declare @p1 int set @p1=NULL exec sp_prepexec @p1 output,N'@P1 int',N'declare @foo INT = @P1 SELECT 1 …