我正在嘗試按名稱查找SQL表,如果存在,請將其刪除。這一切都需要使用SMO在C#中完成。通過C#和SMO檢查並刪除現有表格
使它複雜一點,表格也有一個模式,然後「dbo」。
最後通過SMO重新創建表(我有這個工作),但我必須確保它不存在,然後我可以重新創建它。
我見過的所有例子似乎都是在同一個上下文中創建並刪除表。在我的情況下,表格將在之前的會話中創建並填充。
我正在嘗試按名稱查找SQL表,如果存在,請將其刪除。這一切都需要使用SMO在C#中完成。通過C#和SMO檢查並刪除現有表格
使它複雜一點,表格也有一個模式,然後「dbo」。
最後通過SMO重新創建表(我有這個工作),但我必須確保它不存在,然後我可以重新創建它。
我見過的所有例子似乎都是在同一個上下文中創建並刪除表。在我的情況下,表格將在之前的會話中創建並填充。
第一個問題是,爲什麼你不能使用DDL刪除和重新創建?
而在回答你的問題:
Table table = new Table(myDatabase, "MyTable", "MySchema");
你不能只是包裝在一個try/catch塊的DROP TABLE語句,並丟棄發生的任何錯誤?
反正SQL以確定是否存在表是:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TableName]') AND type in (N'U'))
它不利於我的穀物使用程序流控制錯誤。 感謝您的回覆。 – 2009-06-02 15:08:16
那麼,難道你不能使用我提供的IF EXISTS首先檢查,如果你不喜歡Try/Catch? – 2009-06-02 15:58:32
var connection = new SqlConnection(connectionString);
var server = new Server(new ServerConnection(connection));
db = server.Databases["YourFavDB"];
db.Tables["YourHatedTable"].Drop();
只有一個人回答這個問題,直到現在還沒有一個upvote。這是否有任何正義? – MrTelly 2012-06-12 11:27:41
我認爲最好的辦法是:
Microsoft.SqlServer.Management.Smo.Database myDataBase = myServer.Databases["myDataBaseName"];
bool tableExists= myDataBase.Tables.Contains("myTable");
if (tableExists)
{
myDataBase.Tables["myTable"].Drop();
}
謝謝您的回答。我已經沿着相同的路線走過了不同的路徑: myTable.Schema =「MySchema」 表結構本身是通過解析XML模式實時確定的。 – 2009-06-02 15:06:32