Changing column data type fails if there were indices referencing the column. -----------------------------------------------------------------------------
Key: DDLUTILS-153 URL: https://issues.apache.org/jira/browse/DDLUTILS-153 Project: DdlUtils Issue Type: Bug Components: Core - SqlServer Environment: SQL Server 2000. Reporter: Jun Li Assigned To: Thomas Dudziak Creating a database using the following schema: <?xml version="1.0"?> <!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database.dtd"> <database name="test"> <table name="person"> <column name="id" primaryKey="true" required="true" type="INTEGER" autoIncrement="true"/> <column name="organisation_fk" type="NUMERIC" size="8"/> <index name="IX_Person_Org"> <index-column name="organisation_fk"/> </index> <foreign-key foreignTable="organisation"> <reference local="organisation_fk" foreign="id"/> </foreign-key> </table> <table name="organisation"> <column name="id" primaryKey="true" required="true" type="NUMERIC" size="8" autoIncrement="true"/> <column name="name" type="VARCHAR" size="200"/> </table> </database> ************************************************* And then change the data type of id column of organisation table from 'Numeric' to 'Integer' resulting the following schema: <?xml version="1.0"?> <!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database.dtd"> <database name="test"> <table name="person"> <column name="id" primaryKey="true" required="true" type="INTEGER" autoIncrement="true"/> <column name="organisation_fk" type="INTEGER"/> <index name="IX_Person_Org"> <index-column name="organisation_fk"/> </index> <foreign-key foreignTable="organisation" name="FK_Persion_Org"> <reference local="organisation_fk" foreign="id"/> </foreign-key> </table> <table name="organisation"> <column name="id" primaryKey="true" required="true" type="INTEGER" autoIncrement="true"/> <column name="name" type="VARCHAR" size="200"/> </table> </database> ************************************************ The sql statements generated by using platform.getAlterTablesSql() API are as follows: IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'F' AND name = 'FK_Persion_Org') ALTER TABLE person DROP CONSTRAINT FK_Persion_Org; ALTER TABLE person ALTER COLUMN organisation_fk INT; ALTER TABLE organisation ALTER COLUMN id INT NOT NULL IDENTITY (1,1) ; ALTER TABLE person ADD CONSTRAINT FK_Persion_Org FOREIGN KEY (organisation_fk) REFERENCES organisation (id); *********************************************** There were two problems with the above statements when trying to run it in the SQL Query Analyzer: 1. Server: Msg 156, Level 15, State 1, Line 8 Incorrect syntax near the keyword 'IDENTITY'. 2. Server: Msg 5074, Level 16, State 8, Line 4 The index 'IX_Person_Org' is dependent on column 'organisation_fk'. Server: Msg 4922, Level 16, State 1, Line 4 ALTER TABLE ALTER COLUMN organisation_fk failed because one or more objects access this column. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.