2009-05-29 60 views
6

我正在嘗試按名稱查找SQL表,如果存在,請將其刪除。這一切都需要使用SMO在C#中完成。通過C#和SMO檢查並刪除現有表格

使它複雜一點,表格也有一個模式,然後「dbo」。

最後通過SMO重新創建表(我有這個工作),但我必須確保它不存在,然後我可以重新創建它。

我見過的所有例子似乎都是在同一個上下文中創建並刪除表。在我的情況下,表格將在之前的會話中創建並填充。

回答

0

第一個問題是,爲什麼你不能使用DDL刪除和重新創建?

而在回答你的問題:

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

謝謝您的回答。我已經沿着相同的路線走過了不同的路徑: myTable.Schema =「MySchema」 表結構本身是通過解析XML模式實時確定的。 – 2009-06-02 15:06:32

1

你不能只是包裝在一個try/catch塊的DROP TABLE語句,並丟棄發生的任何錯誤?

反正SQL以確定是否存在表是:

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TableName]') AND type in (N'U')) 
+3

它不利於我的穀物使用程序流控制錯誤。 感謝您的回覆。 – 2009-06-02 15:08:16

+1

那麼,難道你不能使用我提供的IF EXISTS首先檢查,如果你不喜歡Try/Catch? – 2009-06-02 15:58:32

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

db = server.Databases["YourFavDB"]; 

db.Tables["YourHatedTable"].Drop(); 
+0

只有一個人回答這個問題,直到現在還沒有一個upvote。這是否有任何正義? – MrTelly 2012-06-12 11:27:41

3

我認爲最好的辦法是:

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