OK, so Sybase (12.5.4) will let me do the following to DROP a table if it already exists:
IF EXISTS (
SELECT 1
FROM sysobjects
WHERE name = \'a_t
There is no other way than calling create table
in execute("create table ...")
SYBASE Manual says:
When a create table command occurs within an if...else block or a while loop, Adaptive Server creates the schema for the table before determining whether the condition is true. This may lead to errors if the table already exists. To avoid this situation, either make sure a view with the same name does not already exist in the database or use an execute statement, as follows:
if not exists
(select * from sysobjects where name="my table")
begin
execute "create table mytable(x int)"
end
Try using Begin and End.
IF NOT EXISTS ( SELECT Count(1) FROM sysobjects WHERE name = 'a_table' AND type = 'U' ) BEGIN CREATE TABLE a_table ( col1 int not null, col2 int null ) END GO
IF object_id('a_table') IS NULL
BEGIN
CREATE TABLE a_table (
col1 int not null,
col2 int null
)
END
This works when tested with Sybase anywhere 10.01 :
if not exists(select * from SysColumns where tname = 'AAA') then create table DBA.AAA( UNIQUEID integer not null ) END IF ;
If you want to always create the table, but conditionally drop it, you can use:
IF(SELECT count(*) FROM sysobjects WHERE name="tableNameWithoutUserPart") > 0
DROP TABLE tableNameWithUserPart
GO
CREATE TABLE tableNameWithUserPart ...
The only workaround I've come up with so far is to use execute immediate:
IF NOT EXISTS (
SELECT 1
FROM sysobjects
WHERE name = 'a_table'
AND type = 'U'
)
EXECUTE("CREATE TABLE a_table (
col1 int not null,
col2 int null
)")
GO
works like a charm, feels like a dirty hack.