Procedimento armazenado para descartar tabela

Criei um procedimento armazenado que descartará uma tabela se ela existir em um banco de dados. Ao executar o procedimento armazenado com EXEC, estou recebendo o seguinte erro:

Msg 203, Nível 16, Estado 2, Procedimento sp_DropIfExists, Linha 13 O nome 'SE EXISTE (SELECIONE 1 DE sys.objects WHERE OBJECT_ID = OBJECT_ID (N'table_name') AND type = (N'U ')) DROP TABLE [ table_name] 'não é um identificador válido.

No entanto, se eu copiar e colar o T-SQL gerado no estúdio de gerenciamento, ele parece estar funcionando bem. Alguém pode explicar por que isso não é válido? A correção seria legal, mas eu estou realmente atrás do Por que, principalmente, o Como seria legal! Desde já, obrigado

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

questionAnswers(4)

yourAnswerToTheQuestion