Si te encuentras en la situación donde tienes un query que corre perfectamente bien en SQL Management Studio pero dentro de un stored procedure se tarda exageradamente en ejecutar, probablemente tienes un problema conocido como “parameter sniffing”. “Parameter sniffing” ocurre cuando SQL Server guarda un plan de ejecución, o “execution plan”, como la forma más eficiente de resolver ese stored procedure basado en ciertos parámetros. Al momento en que los parámetros cambian, el plan que SQL Server guardó no necesariamente es el mejor plan a seguir para correr, haciendo el stored procedure lento. Es por esta razón que, en muchas ocasiones, un query dentro de un stored procedure se tarda mucho más de lo normal comparandolo con su ejecución fuera del stored procedure.

Para resolver este problema, necesitamos añadir, en la línea de declaración del stored procedure, la instrucción WITH RECOMPILE justamente después de los parámetros. Con este comando le estamos diciendo a SQL Server que no guarde un plan de ejecución para usarlo en futuras ocasiones, sino que lo construya uno nuevo cada vez que el stored procedure sea ejecutado.

Ejemplo:

CREATE PROCEDURE [NombreDelProcedure] (@param1 as varchar(20), @param2 as int) WITH RECOMPILE
AS
BEGIN

     -- contenido del stored procedure

END
GO