【发布时间】:2016-07-26 15:41:39
【问题描述】:
我有一个带有参数的简单存储过程
CREATE Procedure GetSupplierForTesting
(@SupplierId INT)
AS
SELECT SuppLabel
FROM Supplier
WHERE Supplier.SupplierId = @SupplierId
我可以在像这样的另一个存储过程中使用 exec 命令调用它
exec GetSupplierForTesting @SupplierId = 10
我看到一篇文章解释了sp_executesql 如何比exec 快。我的问题是我不知道如何调用带有sp_executesql 参数的存储过程。我试过这段代码
DECLARE @SupplierId INT = 10;
EXEC sp_executesql N'GetSupplierForTesting', N'@SupplierId INT', @SupplierId
但我收到一个错误:
过程或函数“GetSupplierForTesting”需要参数“@SupplierId”,但未提供该参数
【问题讨论】:
-
总是 如果可能,使用
EXEC spName运行存储过程,性能指标仅与EXEC的EXEC <SQL string here>用法有关 - 即,如果您构建了 SQL 语句到一个字符串中,或者你在一个变量中有一个过程名称。 -
还要注意在
sp_executesql之前你仍然有'EXEC',因为你正在调用那个存储过程。 -
您能否将文章链接添加到您的问题中,听起来在任何情况下 sp_executesql 都不太可能是执行过程的更快方式。
-
@JamesZ msdn.microsoft.com/en-us/library/ms175170.aspx,但正如 Martin Smith 解释的那样,只有将 SQL 语句构建到字符串中才会更快
-
是的,这篇文章只意味着查询计划的重用——并且只适用于动态 SQL
标签: sql-server stored-procedures