Tło: Istnieje procedura składowana, która "wypełnia" tabelą tymczasową o danej nazwie. Procedura ma charakter ogólny, ponieważ kontroluje schemat tabeli tymczasowej, a następnie wykonuje różne "rzeczy" w zależności od schematu. Rozumiem, że jest to trochę dziwne, ale niechętnie go zmieniam, ponieważ wszystko działa dobrze w większości sytuacji, z wyjątkiem ....Dlaczego SQL Server uważa, że tabela Temp istnieje już wtedy, gdy nie istnieje?
Jeśli mam procedurę przechowywaną, która tworzy dwa różne schematy dla tabeli tymczasowej z to samo imię. Logicznie tworzy tylko jedną tabelę tymczasową w zależności od gałęzi IF. Problem polega na tym, że gdy sproc jest sprawdzana przez SQL Server wydaje się, że jest ona oceny obu stron IF
Więc to SQL nie powiedzie (co ma sens, jeśli to sprawdzanie składni 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
z powodu następującego błędu:
Msg 2714, Level 16, State 1, Line 14
There is already an object named '#test' in the database.
Żadna kombinacja tabeli rozwijanej wewnątrz IFS (przed lub po tabela tworzyć DDL) wydaje się spełniać sprawdzania sQL.
Jakieś pomysły, jak mogę to zrobić? Czy mogę na przykład powiedzieć SQL, aby nie wykonywał sprawdzania składni i po prostu akceptował sproc jak jest?
Tak dzięki za informacje. Niestety tworzy on tabele w sproc, więc musi być w tej samej partii (więc nie ma go GO). –