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 шт):

Автор решения: SlavaKorol

Спасибо @CrazyElf за ссылку.

Решил проблему изменением процедуры, добавив прослойку в виде дополнительной локальной переменной между передаваемым в процедуру аргументом и условием в SELECT-е:

ALTER PROCEDURE [dbo].[SomeProcedure] @period varchar(7)
BEGIN

DECLARE @periodLocal varchar(20)  = @period;

SELECT *
FROM tbl
WHERE tbl.column = @periodLocal

END
→ Ссылка