Antecedentes: hay un procedimiento almacenado que hace "cosas" con una tabla temporal de un nombre de pila. El procedimiento es genérico porque inspecciona el esquema de la tabla temporal y luego hace diferentes "cosas" dependiendo del esquema. Entiendo que esto es un poco raro, pero me resisto a cambiarlo porque funciona bien en la mayoría de las situaciones, excepto ....¿Por qué SQL Server piensa que ya existe una tabla temporal cuando no lo hace?
Si tengo un procedimiento almacenado que crea dos esquemas diferentes para una tabla temporal con el mismo nombre. Lógicamente, solo crea una tabla temporal según la rama del IF. El problema es que cuando el sproc está marcada por SQL Server parece que está evaluando ambos lados de la SI
Así que este SQL falla (lo cual tiene sentido si se trata de comprobar la sintaxis SQL.):
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
con el error siguiente:
Msg 2714, Level 16, State 1, Line 14
There is already an object named '#test' in the database.
No combinación de tabla de la gota dentro de las ifs (antes o después de la tabla crear DDL) parece satisfacer el corrector sql.
¿Alguna idea de cómo puedo hacer esto? ¿Puedo, por ejemplo, decirle a SQL que no realice la verificación de sintaxis y simplemente aceptar el sproc tal como está?
Sí gracias por la información. Lamentablemente, está creando las tablas en un sproc, por lo que debe estar en el mismo lote (por lo tanto, no se debe continuar GO). –