Это не сработает, так как сразу выйдет из области видимости и не будет использоваться во внешнем скрипте. Это должна быть глобальная временная таблица, или все случаи использования временной таблицы должны быть в динамическом SQL.

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

Если у меня есть хранимая процедура, которая создает две разные схемы для временной таблицы с тем же именем. Логически он создает только одну временную таблицу в зависимости от того, какая ветвь 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.

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

Ответы на вопрос(4)

Ваш ответ на вопрос