powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / проверка существования таблицы
6 сообщений из 6, страница 1 из 1
проверка существования таблицы
    #33997805
Добрый день!

Что то я совсем ничего не понимаю...

В Sybase ASE 12.5 пишу:

if not exists (
select *
from dbo.sysobjects
where name = 'IMP_DE'
and uid = 1
and type = 'U'
)
begin
....
end
else
begin
....
end

Данная таблица существует в базе.

если в блоках поставить, скажем, print '...' то все работает, как надо - выполняются операторы второго блока...но если в первом блоке я ставлю

create table dbo.IMP_DE (...)

пишет, что данный объект уже существует! Ну правильно же, существует, но почему выполняется первая ветка в таком случае.

ничего не могу понять, то ли торможу, то ли чего то не допонимаю...
...
Рейтинг: 0 / 0
проверка существования таблицы
    #33997871
Peter Kirillow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это не мистика, но нормальная работа оптимизатора.
если требуется такая экзотическая работа, как создание постоянной таблицы в сессии (например процедуре), то этот объект должен либо удаляться перед синтаксисом создания, либо создание таблицы надо перетаскивать в другую процедуру.

if not exists (
select *
from dbo.sysobjects
where name = 'IMP_DE'
and uid = 1
and type = 'U'
)
begin
-- create table IMP_DE (a varchar(2)) into qq procedure
exec qq
print 'not exists'
end
else
begin
print "Exists"
end
...
Рейтинг: 0 / 0
проверка существования таблицы
    #33997879
Спасибо:)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!

Переписываю скрипты с SQL Server на Sybase, и о таких нюансах не знал...
...
Рейтинг: 0 / 0
проверка существования таблицы
    #34013786
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял. А можно весть скрипт, с тем, что в begin\end ?
...
Рейтинг: 0 / 0
проверка существования таблицы
    #34013927
Фотография Сашко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача была в следующем - проверить есть ли такая таблица, и если нету то создать ее заново, а если есть, то ничего не делать. Поэтому изначально блоков не было - был просто if not exists (...) create table... И это не работало, если таблица уже существует то выдает ошибку - объект уже существует.

А блоки добавил просто для проверки:
begin
print 'not exists'
end
else
begin
print "Exists"
end

Для принтов - все работает нормально, печатает "Exists". Но если в блоках есть create table, то делалась попытка выполнить его в любом случае.
...
Рейтинг: 0 / 0
проверка существования таблицы
    #34014158
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, это сообщение оптимизатора, или компилятора запросов, а оно возникает ДО выполнения этого кода. Поэтому там как бы IF игнорируется.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / проверка существования таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]