Как создать таблицу, только если она не существует? Использование «object_id (‘table’) РАВНО НУЛЮ» не работает?

#sybase

#sybase

Вопрос:

Я хотел бы проверить, не существует ли таблица, затем создайте ее, в противном случае вставьте в нее данные.

 use tempdb
if object_id('guest.my_tmpTable') IS NULL 
begin
   CREATE TABLE guest.my_tmpTable (
    id int,
    col1 varchar(100)
   )
end 

--- do insert here ...
  

При первом запуске таблица была создана, но при втором запуске sybase жалуется, что таблица уже существует.

Спасибо!

Комментарии:

1. Вы видите его в списке sysobjects? (выберите * из sysobjects, где name=’my_tmpTable’)

Ответ №1:

Причина в том, что весь оператор if и его «истинная» часть компилируются как одно целое.

Если таблица существует во время компиляции — ошибка.

Таким образом, вы могли бы поместить CREATE TABLE оператор в динамический sql statemetn EXEC('CREATE TABLE....')

Тогда все, что Sybase видит при компиляции, это:

 IF object_id('mytab') IS NULL
  EXEC('something or other')
  

Содержимое EXEC не компилируется до выполнения, когда вы знаете, что таблицы нет, и все хорошо.