【问题标题】:Determine if table exists in SQL Server CE?确定表是否存在于 SQL Server CE 中?
【发布时间】:2010-09-30 16:45:14
【问题描述】:

我知道这类似于this question,但我在 C# 中使用带有 WinForms 项目的 SQL Server CE 3.5。如何确定表是否存在?我知道不支持 IF 关键字,但 EXISTS 支持。 CE 中是否存在 information_schema 可以查询它?谢谢。

【问题讨论】:

  • 我认为我有一个漂亮的实现,只是需要什么代码,但它不适合我。我在 social.msdn.microsoft.com/Forums/en-US/… 上发布了一个问题 diesbezueglich (我试图在 codeproject 上发布它,但它多次冻结在我身上)
  • 第三次很有魅力:codeproject.com/Questions/629607/… 是的,我交叉发帖,但发到了两个不同的论坛,所以希望这不会被认为是低俗的。

标签: c# sql sql-server sql-server-ce


【解决方案1】:

使用数据库助手:

var db = Database.Open("MyDatabase");
var sql = @"SELECT Count(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'MyTable'"
var count = db.QueryValue(sql);
if(count.Equals(1)){
    //table exists
}

【讨论】:

    【解决方案2】:

    作为替代方案,您可以查询表并捕获抛出的异常。 如果有异常,则表未找到,否则表存在。

    SELECT TOP 1 1 FROM TableName;
    

    一个小而简单的性能测试比针对 INFORMATION_SCHEMA 的查询有更好的结果。虽然我认为针对 INFORMATION_SCHEMA 的查询更清洁。

    【讨论】:

    • 如果表不存在,该方法会抛出异常,所以你不应该这样做 - 当有一个干净的替代方法时,捕获异常绝不是要走的路。
    【解决方案3】:

    是的,确实存在:

    SELECT *
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME = 'TableName'
    

    【讨论】:

    • "SELECT COUNT(ID)" 会不会更简单、性能更高一些(如果表是宽的(多列)或高的(多行)?
    • 这真的取决于你想如何围绕它编写代码。如果你只是想检查存在,那么是的。我只是想证明 INFORMATION_SCHEMA.TABLES 可用可以查询。剩下的就是基本的 SQL。
    • @MehrdadAfshari 去波斯人!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    相关资源
    最近更新 更多