public IEnumerable <string> RenameColumn(string tableName, string oldName, string newName) { Table table = GetTable(tableName); var column = new Microsoft.SqlServer.Management.Smo.Column(table, oldName); // rename default constraint string oldDefaultConstraintName = ObjectNameHelper.GetObjectName(tableName, "DF", MaximumDbObjectNameLength, oldName); string constraintName = oldDefaultConstraintName; DefaultConstraint defaultConstraint = column.AddDefaultConstraint(constraintName); defaultConstraint.Rename(ObjectNameHelper.GetObjectName(tableName, "DF", MaximumDbObjectNameLength, newName)); // rename column table.Columns.Add(column); column.Rename(newName); // script changes IEnumerable <string> commandTexts = ScriptChanges(table.Parent.Parent); string renameDefaultConstraintCommandText = string.Format(CultureInfo.InvariantCulture, "IF OBJECT_ID('{0}') IS NOT NULL ", oldDefaultConstraintName) + commandTexts.First(); yield return(Regex.Replace(renameDefaultConstraintCommandText, @"EXEC \[\w+\]\.dbo\.sp_rename", @"EXEC dbo.sp_rename")); // for some reason SMO is putting the server name in front of dbo.sp_rename which we do not have in the SqlServerProvider foreach (string commandText in commandTexts.Skip(1)) { yield return(commandText); } }
private static DefaultConstraint AddDefaultConstraint(Microsoft.SqlServer.Management.Smo.Column column, string tableName, object value) { string constraintName = ObjectNameHelper.GetObjectName(tableName, "DF", MaximumDbObjectNameLength, column.Name); DefaultConstraint defaultConstraint = column.AddDefaultConstraint(constraintName); defaultConstraint.Text = GetDefaultValueAsString(value); return(defaultConstraint); }
public void VerifyGetObjectName() { Assert.AreEqual("Customer_DF", ObjectNameHelper.GetObjectName("Customer", "DF", 128), "Basic."); Assert.AreEqual("Customer_Id_DF", ObjectNameHelper.GetObjectName("Customer", "DF", 128, "Id"), "Basic with one additional name."); Assert.AreEqual("Customer_Id_Name_DF", ObjectNameHelper.GetObjectName("Customer", "DF", 128, "Id", "Name"), "Basic with two additional names."); Assert.AreEqual("Cus-mer_Id_Name_DF", ObjectNameHelper.GetObjectName("Customer", "DF", 18, "Id", "Name"), "One char too long."); Assert.AreEqual("Cus-er_Id_Name_DF", ObjectNameHelper.GetObjectName("Customer", "DF", 17, "Id", "Name"), "Two chars too long."); Assert.AreEqual("Cu-er_Id_Name_DF", ObjectNameHelper.GetObjectName("Customer", "DF", 16, "Id", "Name"), "Three chars too long."); Assert.AreEqual("Cu-r_Id_Name_DF", ObjectNameHelper.GetObjectName("Customer", "DF", 15, "Id", "Name"), "Four chars too long."); Assert.AreEqual("C-r_Id_Name_DF", ObjectNameHelper.GetObjectName("Customer", "DF", 14, "Id", "Name"), "Five chars too long."); Assert.AreEqual("C-r_Id_N-e_DF", ObjectNameHelper.GetObjectName("Customer", "DF", 13, "Id", "Name"), "Six chars too long."); Assert.AreEqual("C_Id_N-e_DF", ObjectNameHelper.GetObjectName("Customer", "DF", 12, "Id", "Name"), "Seven chars too long."); Assert.AreEqual("C_Id_N-e_DF", ObjectNameHelper.GetObjectName("Customer", "DF", 11, "Id", "Name"), "Eight chars too long."); Assert.AreEqual("C_Id_N_DF", ObjectNameHelper.GetObjectName("Customer", "DF", 10, "Id", "Name"), "Nine chars too long."); Assert.AreEqual("C_Id_N_DF", ObjectNameHelper.GetObjectName("Customer", "DF", 9, "Id", "Name"), "Ten chars too long."); Assert.AreEqual("C_I_N_DF", ObjectNameHelper.GetObjectName("Customer", "DF", 8, "Id", "Name"), "Eleven chars too long."); }
public IEnumerable <string> DropColumn(string tableName, string columnName) { Table table = GetTable(tableName); string defaultConstraintName = ObjectNameHelper.GetObjectName(tableName, "DF", MaximumDbObjectNameLength, columnName); var column = new Microsoft.SqlServer.Management.Smo.Column(table, columnName); column.AddDefaultConstraint(defaultConstraintName); table.Columns.Add(column); column.Drop(); // script changes IEnumerable <string> commandTexts = ScriptChanges(table.Parent.Parent); string dropDefaultConstraintCommandText = string.Format(CultureInfo.InvariantCulture, "IF OBJECT_ID('{0}') IS NOT NULL ", defaultConstraintName) + commandTexts.First(); yield return(dropDefaultConstraintCommandText); foreach (string commandText in commandTexts.Skip(1)) { yield return(commandText); } }
public void VerifyGetObjectNameThrowsIfTooShort() { Assert.That(() => ObjectNameHelper.GetObjectName("Customer", "DF", 7, "Id", "Name"), Throws.ArgumentException); }
public void VerifyGetObjectNameThrowsIfTooShort() { ObjectNameHelper.GetObjectName("Customer", "DF", 7, "Id", "Name"); }