tsql - 如何有条件地在 Sybase (SQL) 中创建表?

标签 tsql conditional ddl sap-ase

好的,所以 Sybase (12.5.4) 会让我执行以下操作来删除已经存在的表:

IF EXISTS (
    SELECT 1
    FROM sysobjects
    WHERE name = 'a_table'
    AND type = 'U'
)
DROP TABLE a_table
GO

但是如果我尝试对表创建做同样的事情,我总是会收到警告说该表已经存在,因为它继续尝试创建我的表并忽略了条件语句。只需尝试运行以下语句两次,您就会明白我的意思:
IF NOT EXISTS (
    SELECT 1
    FROM sysobjects
    WHERE name = 'a_table'
    AND type = 'U'
)
CREATE TABLE a_table (
    col1 int not null,
    col2 int null
)
GO

运行上面会产生以下错误:

SQL Server Error on (localhost) Error:2714 at Line:7 Message:There is already an object named 'a_table' in the database.



这有什么关系?!

最佳答案

到目前为止,我想出的唯一解决方法是使用立即执行:

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

就像一个魅力,感觉就像一个肮脏的黑客。

关于tsql - 如何有条件地在 Sybase (SQL) 中创建表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/307942/

相关文章:

java - SQL SERVER 2008-无法获取 ddl 架构中少数对象的对象定义?

sql - 将CASE语句与isull和else一起使用

sql-server-2005 - T-SQL - 返回自定义错误消息并结束查询

java - 使用 ANT 时,如果我有特定的 Java 版本,如何才能定义任务?

sql - SSRS - 如何使 IIF 语句忽略无效值

Mysql 给数据类型为 enum 的列添加新值

mysql - 将MySQL建表查询转换为H2语法

c# - SQL 服务器 2005 : dynamically adding parameters to a stored procedure

sql - 插入语句不为一个字段插入值

ruby - 以有条件的方式构建哈希