public static string GetSqlRenameTable(Table oldTable, Table newTable)
{
//RENAME TABLE
var sb = new StringBuilder();
sb.AppendLine("--RENAME TABLE '" + oldTable.DatabaseName + "' TO '" + newTable.DatabaseName + "'");
sb.AppendLine("if exists(select * from sysobjects where name = '" + oldTable.DatabaseName + "' and xtype = 'U')");
sb.AppendLine("exec sp_rename '" + oldTable.DatabaseName + "', '" + newTable.DatabaseName + "';");
sb.AppendLine("GO");
sb.AppendLine();
if (newTable.EnforcePrimaryKey)
{
//RENAME PRIMARY KEY (it will be readded in create script)
var oldIndexName = "PK_" + oldTable.DatabaseName.ToUpper();
var newIndexName = "PK_" + newTable.DatabaseName.ToUpper();
sb.AppendLine("--RENAME PRIMARY KEY FOR TABLE '" + oldTable.DatabaseName + "'");
sb.AppendLine("if exists (select * from sys.indexes where name = '" + oldIndexName + "')");
sb.AppendLine("exec sp_rename '" + oldIndexName + "', '" + newIndexName + "';");
sb.AppendLine();
}
//Rename all FK
foreach (var relation in newTable.GetRelationsWhereChild())
{
var oldIndexName = "FK_" + relation.RoleName + "_" + oldTable.DatabaseName + "_" + relation.ParentTable.DatabaseName;
oldIndexName = oldIndexName.ToUpper();
var newIndexName = "FK_" + relation.RoleName + "_" + newTable.DatabaseName + "_" + relation.ParentTable.DatabaseName;
newIndexName = newIndexName.ToUpper();
sb.AppendLine("--RENAME FK [" + newTable.DatabaseName + "].[" + oldIndexName + "]");
sb.AppendLine("if exists (select * from sys.foreign_keys where name = '" + oldIndexName + "')");
sb.AppendLine("exec sp_rename @objname='" + newTable.GetSQLSchema() + "." + oldIndexName + "', @newname='" + newIndexName + "', @objtype='OBJECT';");
sb.AppendLine();
}
//Rename all indexes for this table's fields
foreach (var column in newTable.GetColumns())
{
var oldColumn = oldTable.GetColumns().FirstOrDefault(x => x.Key == column.Key);
if (oldColumn != null)
{
var oldIndexName = CreateIndexName(oldTable, oldColumn);
var newIndexName = CreateIndexName(newTable, column);
sb.AppendLine("--RENAME INDEX [" + newTable.DatabaseName + "].[" + oldIndexName + "]");
sb.AppendLine("if exists (select * from sys.indexes where name = '" + oldIndexName + "')");
sb.AppendLine("exec sp_rename @objname='" + newTable.GetSQLSchema() + "." + newTable.DatabaseName + "." + oldIndexName + "', @newname='" + newIndexName + "', @objtype='INDEX';");
sb.AppendLine();
}
}
//rename all indexes for this table
foreach (var index in newTable.TableIndexList)
{
var oldIndex = oldTable.TableIndexList.FirstOrDefault(x => x.Key == index.Key);
if (oldIndex != null)
{
var oldIndexName = GetIndexName(oldTable, oldIndex);
var newIndexName = GetIndexName(newTable, index);
sb.AppendLine("--RENAME INDEX [" + newTable.DatabaseName + "].[" + oldIndexName + "]");
sb.AppendLine("if exists (select * from sys.indexes where name = '" + oldIndexName + "')");
sb.AppendLine("exec sp_rename @objname='" + newTable.GetSQLSchema() + "." + newTable.DatabaseName + "." + oldIndexName + "', @newname='" + newIndexName + "', @objtype='INDEX';");
sb.AppendLine();
}
}
var model = newTable.Root as ModelRoot;
//Change the default name for all audit fields
if (oldTable.AllowCreateAudit)
{
var defaultName = ("DF__" + oldTable.DatabaseName + "_" + model.Database.CreatedDateColumnName).ToUpper();
var defaultName2 = ("DF__" + newTable.DatabaseName + "_" + model.Database.CreatedDateColumnName).ToUpper();
sb.AppendLine("--CHANGE THE DEFAULT NAME FOR CREATED AUDIT");
sb.AppendLine("if exists (select * from sys.default_constraints where name = '" + defaultName + "')");
sb.AppendLine("exec sp_rename @objname='" + defaultName + "', @newname='" + defaultName2 + "';");
sb.AppendLine();
}
if (oldTable.AllowModifiedAudit)
{
var defaultName = ("DF__" + oldTable.DatabaseName + "_" + model.Database.ModifiedDateColumnName).ToUpper();
var defaultName2 = ("DF__" + newTable.DatabaseName + "_" + model.Database.ModifiedDateColumnName).ToUpper();
sb.AppendLine("--CHANGE THE DEFAULT NAME FOR MODIFIED AUDIT");
sb.AppendLine("if exists (select * from sys.default_constraints where name = '" + defaultName + "')");
sb.AppendLine("exec sp_rename @objname='" + defaultName + "', @newname='" + defaultName2 + "';");
sb.AppendLine();
}
return sb.ToString();
}