6

I am trying to look for a SQL table by name and if it exists drop it. This all needs to be done in C# using SMO.

To complicate it a bit more the table also has a schema other then "dbo".

Ultimatly the table will be recreated via SMO (I have this working) but I have to make sure it is not there before I can recreate it.

All of the examples that I have seen seem to be creating and then dropping the table all in the same context. In my case the table will have been created and populated in a previous session.

Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
John S
  • 7,909
  • 21
  • 77
  • 145

4 Answers4

12
var connection = new SqlConnection(connectionString);
var server = new Server(new ServerConnection(connection));

db = server.Databases["YourFavDB"];

db.Tables["YourHatedTable"].Drop();
Kevin Driedger
  • 51,492
  • 15
  • 48
  • 55
4

I think the best approach would be:

Microsoft.SqlServer.Management.Smo.Database myDataBase = myServer.Databases["myDataBaseName"];
bool tableExists= myDataBase.Tables.Contains("myTable");
if (tableExists)
{
   myDataBase.Tables["myTable"].Drop();
}
1

Couldn't you just wrap your DROP TABLE statement in a try/catch block, and discard any errors that occur?

Anyway, the sql to determine if a table exists is:

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TableName]') AND type in (N'U'))
Robert Harvey
  • 178,213
  • 47
  • 333
  • 501
0

First question is, why can you not drop and recreate with DDL?

And in answer to your question:

Table table = new Table(myDatabase, "MyTable", "MySchema");
jrista
  • 32,447
  • 15
  • 90
  • 130
  • Thank you for your answer. I have actually gone down the same route but different path: myTable.Schema = "MySchema" The table structure itself is determined on the fly by parsing an XML schema. – John S Jun 02 '09 at 15:06