T-SQL. Процедура бесконечно долго исполняется, если в нее передается текстовый параметр
Имеется T-SQL код на базе SQL Server, который успешно выполняется за минуту:
DECLARE @period varchar(20)
SET @period = '2024.02'
SELECT *
FROM tbl
WHERE tbl.column = @period
И имеется тот же самый код но в виде процедуры, принимающей текстовый параметр:
ALTER PROCEDURE [dbo].[SomeProcedure] @period varchar(7)
BEGIN
SELECT *
FROM tbl
WHERE tbl.column = @period
END
И пример вызова процедуры:
DECLARE @return_value int
DECLARE @per varchar(20)
SET @per = '2024.02'
EXEC @return_value = [dbo].[SomeProcedure] @per
SELECT 'Return Value' = @return_value
Данный вызов процедуры так и не удалось успешно завершить, так как он выполняется очень долгое время.
Что можно попробовать ещё, чтобы сократить время исполнения до ожидаемого?
Я пробовал захардкодить эту текстовую переменную в процедуре - она успешно исполнялась за ту же минуту, как и в обычном запросе.
Пробовал в обычном запросе создавать varchar(max) переменную вместо varchar(20), но он всё равно успешно завершался за приемлемое время.
Ответы (1 шт):
Спасибо @CrazyElf за ссылку.
Решил проблему изменением процедуры, добавив прослойку в виде дополнительной локальной переменной между передаваемым в процедуру аргументом и условием в SELECT
-е:
ALTER PROCEDURE [dbo].[SomeProcedure] @period varchar(7)
BEGIN
DECLARE @periodLocal varchar(20) = @period;
SELECT *
FROM tbl
WHERE tbl.column = @periodLocal
END