Как создать таблицу, только если она не существует?Использование "object_id ('table') IS NULL" не работает? - PullRequest
4 голосов
/ 02 ноября 2011

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

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 Ответ

7 голосов
/ 04 ноября 2011

Причина в том, что весь оператор - if и его "истинная" часть скомпилированы как единое целое.

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

Таким образом, вы можете поместить CREATE TABLE оператор в динамическое состояние sqlmetn EXEC('CREATE TABLE....')

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

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

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

...