我正在尝试按名称查找SQL表,如果存在则删除它。这一切都需要使用SMO在C#中完成。
为了使其复杂化,该表还具有除“dbo”之外的模式。
最终表格将通过SMO重新创建(我有这个工作)但我必须确保它不存在,然后才能重新创建它。
我看到的所有示例似乎都在创建,然后将表全部放在同一个上下文中。在我的情况下,表格将在之前的会话中创建并填充。
答案 0 :(得分:8)
var connection = new SqlConnection(connectionString);
var server = new Server(new ServerConnection(connection));
db = server.Databases["YourFavDB"];
db.Tables["YourHatedTable"].Drop();
答案 1 :(得分:3)
我认为最好的方法是:
Microsoft.SqlServer.Management.Smo.Database myDataBase = myServer.Databases["myDataBaseName"];
bool tableExists= myDataBase.Tables.Contains("myTable");
if (tableExists)
{
myDataBase.Tables["myTable"].Drop();
}
答案 2 :(得分:1)
难道你不能将DROP TABLE语句包装在try / catch块中,并丢弃发生的任何错误吗?
无论如何,用于确定表是否存在的sql是:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TableName]') AND type in (N'U'))
答案 3 :(得分:0)
第一个问题是,为什么不能使用DDL删除和重新创建?
回答你的问题:
Table table = new Table(myDatabase, "MyTable", "MySchema");