Почему SQL Server считает, что временная таблица уже существует, а ее нет?

Предпосылки: существует хранимая процедура, которая выполняет «наполнение» временной таблицей с заданным именем. Процедура является общей в том смысле, что она проверяет схему временной таблицы, а затем выполняет разные «вещи» в зависимости от схемы. Я понимаю, что это немного странно, но я не хочу менять это, потому что в большинстве ситуаций все работает нормально, за исключением ....

Если у меня есть хранимая процедура, которая создает две разные схемы для временной таблицы с тем же именем. Логически он создает только одну временную таблицу в зависимости от того, какая ветвь IF. Проблема в том, что когда Sproc проверяется SQL Server, кажется, что он оценивает обе стороны IF (что имеет смысл, если он проверяет синтаксис SQL).

Таким образом, этот 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 

со следующей ошибкой :

Сообщение 2714, уровень 16, состояние 1, строка 14
Уже существует объект с именем '#test' в базе данных.

Никакая комбинация таблицы перетаскивания внутри ifs (до или после DDL создания таблицы), похоже, удовлетворяет sql checker.

Есть идеи, как я могу это сделать? Могу я, например, сказать SQL, чтобы он не выполнял проверку синтаксиса и просто принимал sproc как есть?

8
задан marc_s 28 January 2011 в 12:48
поделиться