Проверка и удаление существующей таблицы через C # и SMO - PullRequest
6 голосов
/ 30 мая 2009

Я пытаюсь найти таблицу SQL по имени и, если она существует, отбросить ее. Все это должно быть сделано в C # с использованием SMO.

Чтобы усложнить это немного, в таблице также есть схема, отличная от "dbo".

В конечном итоге таблица будет воссоздана через SMO (у меня это работает), но я должен убедиться, что ее нет, прежде чем я смогу ее воссоздать.

Кажется, что все примеры, которые я видел, создают, а затем отбрасывают таблицу в одном контексте. В моем случае таблица будет создана и заполнена в предыдущем сеансе.

Ответы [ 4 ]

8 голосов
/ 15 августа 2011
var connection = new SqlConnection(connectionString);
var server = new Server(new ServerConnection(connection));

db = server.Databases["YourFavDB"];

db.Tables["YourHatedTable"].Drop();
3 голосов
/ 13 августа 2014

Я думаю, что лучший подход будет:

Microsoft.SqlServer.Management.Smo.Database myDataBase = myServer.Databases["myDataBaseName"];
bool tableExists= myDataBase.Tables.Contains("myTable");
if (tableExists)
{
   myDataBase.Tables["myTable"].Drop();
}
1 голос
/ 30 мая 2009

Не могли бы вы просто обернуть оператор DROP TABLE в блок try / catch и отбросить все возникающие ошибки?

В любом случае, sql, чтобы определить, существует ли таблица:

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TableName]') AND type in (N'U'))
0 голосов
/ 30 мая 2009

Первый вопрос: почему вы не можете бросить и воссоздать с DDL?

И в ответ на ваш вопрос:

Table table = new Table(myDatabase, "MyTable", "MySchema");
...