4
用sp_开头用户存储过程的名称仍然错误吗?
我的一位同事在我们的SQL Server 2008 R2数据库中命名了一个存储过程sp_something。当我看到此消息时,我立即想到:“那是错误的!” 并开始在我的书签中搜索此在线文章,该文章解释了错误的原因,因此我可以向我的同事提供解释。 在这篇文章(由Brian Moran撰写)中,解释了给存储过程一个sp_前缀使SQL Server可以在master数据库中查看已编译的计划。由于sp_sproc不在此处,因此SQL Server将重新编译该过程(并为此需要一个专用的编译锁,从而导致性能问题)。 本文提供了以下示例,以显示两个过程之间的区别: USE tempdb; GO CREATE PROCEDURE dbo.Select1 AS SELECT 1; GO CREATE PROCEDURE dbo.sp_Select1 AS SELECT 1; GO EXEC dbo.sp_Select1; GO EXEC dbo.Select1; GO 您运行此程序,然后打开Profiler(添加“存储过程-> SP:CacheMiss事件”)并再次运行存储过程。您应该看到两个存储过程之间的区别:sp_Select1存储过程将比存储过程生成一个更多的SP:CacheMiss事件Select1(本文引用了SQL Server 7.0和SQL Server 2000。) 当我在SQL Server 2008 R2环境中运行该示例时SP:CacheMiss,两个过程都得到相同数量的事件(在tempdb和另一个测试数据库中)。 所以我想知道: 我可以在执行示例时做错什么吗? sproc sp_something在新版本的SQL Server中,“不命名用户” adagium是否仍然有效? 如果是这样,是否有一个很好的示例显示其在SQL …