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á?