Допустим, у меня есть таблица "foo", которую я хочу создать с помощью SMO. Есть ли способ сделать так, чтобы в сгенерированном скрипте таблица имела другое имя, например "foo2"?
Database db = sqlServer.Databases["testdb"];
Table foo = db.Tables["foo"];
foo.Name = "foo2";
Если я это сделаю, я получаю это исключение, когда пытаюсь установить foo.Name:
«Невозможно выполнить операцию с этим объектом, потому что объект является членом коллекции».
Есть ли способ сделать это с помощью SMO?





Вам нужно будет поместить вывод метода Script в строковую переменную и использовать Replace для замены имени.
Верно, но, вероятно, это можно обойти с помощью НАЙТИ «СОЗДАТЬ ТАБЛИЦУ foo» ЗАМЕНИТЬ «СОЗДАТЬ ТАБЛИЦУ foo2», чтобы избежать попадания в столбцы. Но тогда вам, возможно, придется выполнить несколько замен, чтобы попасть в ограничения и индексы. Не уверен, что они написаны отдельно. Давно не играл с SMO.
Имя таблицы будет сразу после первого «CREATE TABLE» в скрипте.
Вы можете создать новую таблицу в памяти с новым именем, а затем создать скрипт для этой таблицы.
Вы можете найти код для копирования таблицы на Копирование таблицы с помощью SMO
Вместо вызова Create () для новой таблицы вам нужно просто вызвать Script ().
Для людей вроде меня, которые пытаются узнать, как переименовать столбец с помощью SMO, если вы используете тот же метод, что и выше
foo.Name = "foo2";
вы получите такое же сообщение об исключении в этой цепочке. Чтобы переименовать столбец, вам просто нужно перейти
foo.Rename("foo2");
Подробнее см. MSDN:
Кажется рискованным, поскольку имя таблицы может быть подстрокой других объектов (столбцов и т. д.).