Проверка наличия и удаление существующей таблицы с помощью C # и SMO
Вопрос
Я пытаюсь найти таблицу SQL по имени и, если она существует, отбросить ее.Все это нужно сделать на C # с помощью SMO.
Чтобы еще немного усложнить ситуацию, в таблице также есть схема, отличная от "dbo".
В конечном итоге таблица будет воссоздана через SMO (у меня это работает), но я должен убедиться, что ее там нет, прежде чем я смогу ее воссоздать.
Все примеры, которые я видел, похоже, создают, а затем удаляют таблицу в одном и том же контексте.В моем случае таблица будет создана и заполнена в предыдущем сеансе.
Решение
Первый вопрос заключается в том, почему вы не можете удалить и воссоздать с помощью DDL?
И в ответ на ваш вопрос:
Table table = new Table(myDatabase, "MyTable", "MySchema");
Другие советы
var connection = new SqlConnection(connectionString);
var server = new Server(new ServerConnection(connection));
db = server.Databases["YourFavDB"];
db.Tables["YourHatedTable"].Drop();
Я думаю, что лучшим подходом было бы:
Microsoft.SqlServer.Management.Smo.Database myDataBase = myServer.Databases["myDataBaseName"];
bool tableExists= myDataBase.Tables.Contains("myTable");
if (tableExists)
{
myDataBase.Tables["myTable"].Drop();
}
Не могли бы вы просто обернуть свой оператор DROP TABLE в блок try / catch и удалить все возникающие ошибки?
В любом случае, sql для определения того, существует ли таблица, является:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TableName]') AND type in (N'U'))