在Java的SQL Server的所有列中将一种数据类型更改为另一种数据类型

时间:2014-04-29 13:41:29

标签: java sql sql-server database sqldatatypes

我正在使用Altova XMLSpy从一个GML架构创建数据库。但是,所有字符串类型字段都转换为char(255)。我需要把它变成nvarchar(255)。 我可以用Java做到这一点吗?我认为这将是有用的,因为我需要以这种方式创建多个DB,因此我需要自动化流程。 或者,(我知道这不是问题的标题)我可以将xsd:String重写为XMLSpy将其识别为nvarchar(255)的其他内容吗?

P.S。 XMLSpy向我提供导出到我手动更改所有这些,但逐列。

修改 这个DB是空的,根本没有记录。

EDIT2: 我解决了我的问题,部分原因。现在,它改变了一些列但不是全部。 这是我的代码。哪里错了?

public static void main(String[] args){
    DataTypeChanger test=new DataTypeChanger();
    test.connect();
    test.dropCheckConstraints(); // it drops them successfully, I don't need them.
    test.disableConstraints();
    test.changeDataType();
    //test.enableConstraints();

    try {
        /*test.st.close();
        test.rs.close();*/
        test.conn.close();
        System.out.println("Disconnected!");
    } catch (SQLException e) {
        e.printStackTrace();
    }

}

public void disableConstraints(){
    try {
        st = conn.createStatement();
        st.execute("EXEC sp_msforeachtable \"ALTER TABLE ? NOCHECK CONSTRAINT all\"");
    } catch (SQLException e) {
        e.printStackTrace();
        System.out.println("Query ne radi!");
    }
}

public void enableConstraints(){
    try {
        st = conn.createStatement();
        st.execute("exec sp_msforeachtable @command1=\"print '?'\", @command2=\"ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all\"");
    } catch (SQLException e) {
        e.printStackTrace();
        System.out.println("Query ne radi!");
    }
}

public void changeDataType(){
    try {
        st = conn.createStatement();
        Statement stt = conn.createStatement();
        rs = st.executeQuery("SELECT a.name as ColName, o.name AS TableName FROM sys.syscolumns AS a INNER JOIN sys.systypes AS b ON a.xtype = b.xtype AND b.name = 'char' AND a.length = 255 INNER JOIN sys.objects AS o ON a.id = o.object_id WHERE (o.type = 'u') AND (o.schema_id = 1)");
        while (rs.next()){
            String tName=rs.getString("TableName");
            String cName=rs.getString("ColName");
            //System.out.println(tName+"  "+cName);
            try{
                stt.execute("ALTER TABLE "+ tName+" ALTER COLUMN "+cName+" nvarchar(255)");
            }catch(SQLException ee){

            }
        }
        stt.close();
    } catch (SQLException e) {
        e.printStackTrace();
        System.out.println("Query ne radi!");
    }
}

0 个答案:

没有答案