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

时间:2011-11-02 00:30:40

标签: 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 个答案:

答案 0 :(得分:7)

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

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

因此,您可以将CREATE TABLE语句放入动态sql statemetn EXEC('CREATE TABLE....')

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

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

EXEC的内容在执行之前不会编译,当你知道没有表格且一切都很好的时候。