重命名列(如果H2中存在)

时间:2019-05-29 14:59:04

标签: h2

我有一个H2 sql脚本文件,该文件在每次应用程序更新或以前未创建数据库时都会执行。

因此,脚本文件中的所有内容都取决于“ IF NOT EXISTS”或“ IF EXISTS”验证检查。

因此,我在创建用于重命名列的SQL时遇到问题,并且无法找到一种方法来执行此操作,因为如果多次执行了重命名语句,则会出现有关列不存在的错误。

我尝试了以下方法:

ALTER TABLE X RENAME COLUMN IF NOT EXISTS Y TO Z;

1 个答案:

答案 0 :(得分:0)

我创建了一个函数来满足我的需求,如下所示。如果您采用其他方法,请告诉我。 tks!

DROP ALIAS IF EXISTS RENAME_COLUMN_IF_EXISTS;
CREATE ALIAS RENAME_COLUMN_IF_EXISTS AS  $$
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@CODE
void renameColumnIfExists(final Connection conn, final String tableName, final String cOld, final String cNew) throws SQLException {
    StringBuffer sql = new StringBuffer();
    sql.append("SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ? AND COLUMN_NAME = ?"); 

    PreparedStatement ps = conn.prepareStatement(sql.toString());

    try {
        ps.setString(1, tableName);
        ps.setString(2, cOld);

        ResultSet results = ps.executeQuery();

        if (results.next()) {
            if (results.getInt(1) > 0) {
                ps.close();

                sql = new StringBuffer()
                    .append("ALTER TABLE").append(" ")
                    .append(tableName).append(" ")
                    .append("RENAME COLUMN").append(" ")
                    .append(cOld).append(" ")
                    .append("TO").append(" ")
                    .append(cNew);
                ps = conn.prepareStatement(sql.toString());
                ps.executeUpdate();
            }
        }
    } finally {
        ps.close();
    }
}
$$;

CALL RENAME_COLUMN_IF_EXISTS ('X', 'Y', 'Z');