【问题标题】:Invalid Object name error but table found in schema?无效的对象名称错误但在模式中找到表?
【发布时间】:2019-06-18 17:27:46
【问题描述】:

我正在使用 ADODB 连接来连接到我的其他同事都不了解如何连接的数据库。到目前为止,我已经能够通过 2 种方法查看所有可用的表:

Dim ado as object
set ado = CreateObject("ADODB.Connection")
Call ado.open("...")

set rs = ado.Execute("SELECT * FROM sys.objects WHERE type='U'")

还有

const adTable = 20
Set rstSchema = ado.OpenSchema(adTable)
Do Until rstSchema.EOF
    Debug.Print rstSchema("TABLE_NAME")
    rstSchema.MoveNext
Loop

但让我感到困惑的部分是直接从表格中选择......我希望能够做到:

select * from <<TABLENAME>>

其中&lt;&lt;TABLENAME&gt;&gt; 是上述两种方法返回的表名之一。但是,每当我这样做时,标题中都会出现错误:

Invalid object name '<<TABLENAME>>'.

那么,我究竟是如何访问从 OpenSchema() 方法标识的表中的数据的。还有其他我不熟悉的方法吗?

【问题讨论】:

  • 发布我尝试过的问题后的几秒钟(看起来是什么)&lt;&lt;Catalog&gt;&gt;.&lt;&lt;Schema&gt;&gt;.&lt;&lt;TableName&gt;&gt;。谁能确认这是正确的名称吗?
  • 你用的是什么数据库引擎?
  • @DaveInCaz 我相信是 SQL Server
  • 当执行 SELECT * FROM TableName 时,TableName 必须是明确的表名......它不能是变量。您可以从结果中构建一个 SQL 字符串,以便最终将 SQL 作为字符串传递,其中明确说明完整的 SQL 语句,传递给 EXECUTE 语句以执行,然后读回结果。但是你不能参数化表名。
  • 已确认。在 SQL Server 术语中:&lt;&lt;Database&gt;&gt;.&lt;&lt;Owner&gt;&gt;.&lt;&lt;TableName&gt;&gt;。如果首先执行USE &lt;&lt;Database&gt;&gt;,则可以只使用>。然后突然所有者不再重要。

标签: sql-server vb6 adodb


【解决方案1】:

正如在 cmets 中与 itsLex 讨论的那样:

在 SQL Server 术语中:

select * from <<Database>>.<<Owner>>.<<TableName>>

您也可以使用USE 语句,如下所示:

USE <<Database>>;
select * from <<TableName>>;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多