如果不存在,如何只创建表?使用"object_id('table')IS NULL"不起作用?

Sou*_*uth 4 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 ...
Run Code Online (Sandbox Code Playgroud)

第一次运行时,表已创建,但第二次运行sybase抱怨表已存在.

谢谢!

小智 7

原因是整个语句 - 如果及其"真实"部分被编译为一个.

如果编译期间表存在 - 错误.

所以你可以将CREATE TABLE语句放入动态的sql statemet中EXEC('CREATE TABLE....')

然后Sybase在编译时看到的是:

IF object_id('mytab') IS NULL
  EXEC('something or other')
Run Code Online (Sandbox Code Playgroud)

EXEC直到执行时才会编译内容,当你知道没有表并且一切都很好时.