Skip to content

Commit

Permalink
0001373: dropping a column with a default value fails on sql server b…
Browse files Browse the repository at this point in the history
…ecause of default constraint
  • Loading branch information
chenson42 committed Aug 7, 2013
1 parent 3786fad commit ab642a7
Showing 1 changed file with 23 additions and 0 deletions.
Expand Up @@ -422,6 +422,7 @@ protected void processTableStructureChanges(Database currentModel, Database desi
*/
return;
}

}

// First we drop primary keys as necessary
Expand Down Expand Up @@ -521,6 +522,11 @@ protected void processChange(Database currentModel, Database desiredModel,
*/
protected void processChange(Database currentModel, Database desiredModel,
RemoveColumnChange change, StringBuilder ddl) {
boolean hasDefault = change.getColumn().getParsedDefaultValue() != null;
if (hasDefault) {
dropDefaultConstraint(change.getChangedTable().getName(), change.getColumn().getName(), ddl);
}

ddl.append("ALTER TABLE ");
printlnIdentifier(getTableName(change.getChangedTable().getName()), ddl);
printIndent(ddl);
Expand Down Expand Up @@ -565,6 +571,23 @@ protected void processChange(Database currentModel, Database desiredModel,
printEndOfStatement(ddl);
change.apply(currentModel, delimitedIdentifierModeOn);
}

protected void dropDefaultConstraint(String tableName, String columnName, StringBuilder ddl) {
println( "DECLARE @sql NVARCHAR(2000) ", ddl);
println( "WHILE 1=1 ", ddl);
println( "BEGIN ", ddl);
println(String.format("SELECT TOP 1 @sql = N'alter table '%s' drop constraint ['+dc.NAME+N']' ", tableName), ddl);
println( "from sys.default_constraints dc ", ddl);
println( "JOIN sys.columns c ", ddl);
println( " ON c.default_object_id = dc.object_id ", ddl);
println( "WHERE ", ddl);
println(String.format(" dc.parent_object_id = OBJECT_ID('%s') ", tableName), ddl);
println(String.format("AND c.name = N'%s' ", columnName), ddl);
println( "IF @@ROWCOUNT = 0 BREAK ", ddl);
println( "EXEC (@sql) ", ddl);
println( "END ", ddl);
printEndOfStatement(ddl);
}

/*
* Processes a change to a column.
Expand Down

0 comments on commit ab642a7

Please sign in to comment.