【发布时间】:2010-10-30 00:36:12
【问题描述】:
我正在尝试按名称查找 SQL 表,如果存在则删除它。这一切都需要在 C# 中使用 SMO 完成。
为了更复杂一点,该表还有一个除“dbo”之外的架构。
最终表格将通过 SMO 重新创建(我有这个工作),但我必须确保它不存在,然后才能重新创建它。
我看到的所有示例似乎都是在同一上下文中创建然后删除表。在我的情况下,该表将在之前的会话中创建和填充。
【问题讨论】:
我正在尝试按名称查找 SQL 表,如果存在则删除它。这一切都需要在 C# 中使用 SMO 完成。
为了更复杂一点,该表还有一个除“dbo”之外的架构。
最终表格将通过 SMO 重新创建(我有这个工作),但我必须确保它不存在,然后才能重新创建它。
我看到的所有示例似乎都是在同一上下文中创建然后删除表。在我的情况下,该表将在之前的会话中创建和填充。
【问题讨论】:
第一个问题是,为什么不能使用 DDL 删除和重新创建?
回答你的问题:
Table table = new Table(myDatabase, "MyTable", "MySchema");
【讨论】:
难道您不能将您的 DROP TABLE 语句包装在一个 try/catch 块中,并丢弃发生的任何错误吗?
反正判断表是否存在的sql是:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TableName]') AND type in (N'U'))
【讨论】:
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();
}
【讨论】: