Справочная информация: есть хранимая процедура, которая «заполняет» временную таблицу с заданным именем. Процедура является общей в том смысле, что она проверяет схему временной таблицы, а затем выполняет различные «вещи» в зависимости от схемы. Я понимаю, что это немного странно, но я не хочу менять это, потому что в большинстве ситуаций все работает нормально, кроме ....
Если у меня есть хранимая процедура, которая создает две разные схемы для временной таблицы с тем же именем. Логически он создает только одну временную таблицу в зависимости от того, какая ветвь 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 как есть?