Если бы это был большой запрос, будет ли он быстрее во второй хранимой процедуре?Есть ли разница в скорости между использованием EXEC sp_executesql и прямым SQL
CREATE PROCEDURE Customers_GetCustomer
@CustId CHAR(5)
AS
BEGIN
DECLARE @SQL NVARCHAR(2000)
SET @SQL = 'SELECT ContactName FROM Customers WHERE CustomerId = @CustomerId'
EXEC sp_executesql @SQL, N'@CustomerId CHAR(5)', @CustomerId = @CustId
END
Versus:
CREATE PROCEDURE Customers_GetCustomer
@CustId CHAR(5)
AS
BEGIN
SELECT ContactName FROM Customers WHERE CustomerId = @CustId
END
Динамический SQL должен анализироваться при каждом вызове (хотя план выполнения может быть спрятан). Обычный SQL можно просто скомпилировать напрямую. Если вы выполняете транзакции, это может быть проблемой. Если ваши запросы немного сложнее, то дополнительные усилия для компиляции, вероятно, не являются проблемой. –
Различия в производительности незначительны, но вы не должны использовать динамический sql, если на самом деле это не нужно, потому что это затрудняет работу. Это приводит к выводу, что это действительно не имеет большого значения. Если вам нужен динамический sql, вы не можете использовать стандартный запрос. –