Por que o SQL Server acha que uma tabela temporária já existe quando não existe?

Segundo plano: existe um procedimento armazenado que faz "coisas" com uma tabela temporária de um determinado nome. O procedimento é genérico, pois inspeciona o esquema da tabela temporária e executa diferentes "coisas", dependendo do esquema. Entendo que isso é um pouco estranho, mas reluto em alterá-lo porque tudo funciona bem na maioria das situações, exceto ...

Se eu tiver um procedimento armazenado que crie dois esquemas diferentes para uma tabela temporária com o mesmo nome. Logicamente, ele cria apenas uma tabela temporária, dependendo de qual ramificação do FI. O problema é que, quando o Sproc é verificado pelo SQL Server, parece que ele está avaliando os dois lados do FI (o que faz sentido se estiver verificando a sintaxe do SQL).

Portanto, este SQL falha:

IF (1=1)
BEGIN
    CREATE TABLE #test
    (
        a BIGINT NOT NULL,
        b BIGINT NOT NULL
    )
END 
ELSE
BEGIN
    CREATE TABLE #test
    (
        a BIGINT NOT NULL,
        b BIGINT NOT NULL,
        c BIGINT NOT NULL   
    )   
END

--exec SomeProcedureWhichDoesStuffWith#Test

DROP TABLE #test 

com o seguinte erro:

Mensagem 2714, nível 16, estado 1, linha 14
Já existe um objeto chamado '#test' no banco de dados.

Nenhuma combinação de drop table dentro do ifs (antes ou depois da DDL da tabela de criação) parece satisfazer o verificador sql.

Alguma idéia de como posso fazer isso? Por exemplo, posso dizer ao SQL para não executar a verificação de sintaxe e apenas aceitar o sproc como está?

questionAnswers(4)

yourAnswerToTheQuestion