检查列是否存在,然后从 table 更改列?

Check if column exists then alter column from the table?

我想编写 sql 脚本来检查 table 中是否存在列,然后如果前面的语句为真则删除该列。我使用的数据库是 Sybase ASE,这是我尝试使用的代码:

IF EXISTS (SELECT 1 FROM syscolumns WHERE id = object_id('users') AND name = 'maiden_name')
    BEGIN
        ALTER TABLE security DROP maiden_name
    END

上面的代码我第一次成功执行运行。我第二次得到错误:

Invalid column name 'maiden_name'

如果列不存在,ALTER TABLE 代码块不应 运行。有没有办法实现这个是Sybase?谢谢。

你可以使用动态 SQL:

IF EXISTS (SELECT 1 FROM syscolumns WHERE id = object_id('users') AND name = 'maiden_name')
    BEGIN
        EXEC('ALTER TABLE security DROP maiden_name')
    END;

问题是解析器在编译阶段试图解析ALTER,如果该列不存在就会出错。