我有一个H2 sql脚本文件,该文件在每次应用程序更新或以前未创建数据库时都会执行。
因此,脚本文件中的所有内容都取决于“ IF NOT EXISTS”或“ IF EXISTS”验证检查。
因此,我在创建用于重命名列的SQL时遇到问题,并且无法找到一种方法来执行此操作,因为如果多次执行了重命名语句,则会出现有关列不存在的错误。
我尝试了以下方法:
ALTER TABLE X RENAME COLUMN IF NOT EXISTS Y TO Z;
答案 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');