Procedimiento almacenado para soltar tabla

He creado un procedimiento almacenado que eliminará una tabla si existe en una base de datos. Al ejecutar el procedimiento almacenado con EXEC, obtengo el siguiente error:

Msg 203, Nivel 16, Estado 2, Procedimiento sp_DropIfExists, Línea 13 El nombre 'IF EXISTS (SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID (N'table_name') AND type = (N'U ')) DROP TABLE [ nombre_tabla] 'no es un identificador válido.

Sin embargo, si copio y pego el T-SQL que se genera en el estudio de administración, parece estar funcionando bien. ¿Alguien puede explicar por qué esto no es válido? La solución sería buena, pero realmente estoy detrás de ¿Por qué, sin embargo, cómo sería bueno? Gracias por adelantado

ALTER PROCEDURE [dbo].[sp_DropIfExists](@tableName VARCHAR(255)) 
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @SQL VARCHAR(MAX);
    SET @SQL = 'IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N''' + @tableName + ''') AND type = (N''U'')) DROP TABLE [' + @tableName + ']'
    PRINT @SQL;
    EXEC @SQL;
END

Respuestas a la pregunta(4)

Su respuesta a la pregunta