如何检查表是否存在或不存在

5
如何检查表格是否存在?
使用VB 6.0。
cmd.CommandText = "drop table t1"
cmd.Execute

以上代码工作正常,但如果表不存在,则会显示“表不存在”

如何检查表是否存在或不存在?

需要VB代码帮助吗?


我看到你是新手,注意到你还没有标记任何问题的答案。别忘了这样做,因为它不仅会让回答者获得声望(积分),而且还会将其标记为其他可能正在寻找相同答案的人的答案。 :) - Dusty
3个回答

4

如果你只想删除表而不出现错误信息,且使用MySQL,可以使用以下SQL语句。

DROP TABLE t1 IF EXISTS

其他数据库也有类似的功能,但语法不同。在MSSQL中执行相同操作的方法如下:

IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1') DROP TABLE t1;

虽然这看起来很丑...但一定有更好的语法来实现相同的结果。

我忘记了INFORMATION_SCHEMA - 我总是总是忘记它的存在 - 尽管最近似乎大部分时间都在使用MySql!好主意 :) - Rob

3

对于Jet MDB(以及可能适用于许多OLEDB提供程序),您可以采用以下方法:

Private Sub Main()
    Dim cnDB As ADODB.Connection

    Set cnDB = New ADODB.Connection
    cnDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
            & "Jet OLEDB:Engine Type=5;Data Source='sample.mdb'"

    'Check presence of table --------------
    Dim rsSchema As ADODB.Recordset

    Set rsSchema = _
        cnDB.OpenSchema(adSchemaColumns, _
                        Array(Empty, Empty, "t1", Empty))
    If rsSchema.BOF And rsSchema.EOF Then
        MsgBox "Table does not exist"
    Else
        MsgBox "Table exists"
    End If
    rsSchema.Close
    Set rsSchema = Nothing
    '--------------------------------------

    cnDB.Close
End Sub

1
最好检查所涉及的表是否存在,而不是尝试删除它。
SQL语法取决于您使用的数据库服务器/引擎,但对于Sql Server,您可以使用类似以下的语句:
Sql Server 2000:
SELECT 1 as Exists FROM sysobjects WHERE name = 't1'

Sql Server 2005/2008:

SELECT 1 as Exists FROM sys.objects WHERE name = 't1'

然后你可以像这样使用VB:

Dim rs as Recordset
Dim iExists as Integer

rs = cmd.Execute
On Error Goto DoesNotExist
rs.MoveFirst
iExists = CInt(rs!Exists)
DoesNotExist:
If iExists = 1 Then
 ' Put code here for if the table exists
Else
 ' Put code here for if the table does not exist
End If

注意:这段代码需要整理和"投产"(也就是说,我实际上没有测试它是否有效,因为我在这台机器上没有VB6)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接