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