6

我正在尝试按名称查找 SQL 表,如果存在则删除它。这一切都需要在 C# 中使用 SMO 完成。

更复杂的是,该表还具有除“dbo”之外的模式。

最终,该表将通过 SMO 重新创建(我有这个工作),但我必须确保它不存在,然后才能重新创建它。

我看到的所有示例似乎都是在同一上下文中创建然后删除表。在我的情况下,该表将在前一个会话中创建和填充。

4

4 回答 4

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

db = server.Databases["YourFavDB"];

db.Tables["YourHatedTable"].Drop();
于 2011-08-15T18:43:18.227 回答
4

我认为最好的方法是:

Microsoft.SqlServer.Management.Smo.Database myDataBase = myServer.Databases["myDataBaseName"];
bool tableExists= myDataBase.Tables.Contains("myTable");
if (tableExists)
{
   myDataBase.Tables["myTable"].Drop();
}
于 2014-08-12T20:31:56.740 回答
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'))
于 2009-05-29T22:14:52.743 回答
0

第一个问题是,为什么不能使用 DDL 删除和重新创建?

并回答您的问题:

Table table = new Table(myDatabase, "MyTable", "MySchema");
于 2009-05-29T22:11:48.663 回答