0

我正在将一个应用程序改造成 ZF2 并遇到了障碍。我将 PDO 与 sqlsrv 驱动程序一起使用,我需要运行以下查询:

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_NAME

我的查询函数如下所示:

public function getTables()
{      
    $sql = new Sql($this->dbAdapter);
    $select = $sql->select();

    $select->columns(array('TABLE_NAME'))
            ->from('INFORMATION_SCHEMA.TABLES')
            ->order('TABLE_NAME');

    $statement = $sql->prepareStatementForSqlObject($select);

    $results = $statement->execute();

    return $results;
}

我不断收到以下错误:

SQLSTATE[42S02]:[Microsoft][SQL Server Native Client 11.0][SQL Server]无效的对象名称“INFORMATION_SCHEMA.TABLES”。

是否有一种特殊的编码方式?我可以整天查询标准数据库表,没有问题。

提前感谢您的任何建议。

4

4 回答 4

1

此查询还为您提供所有表。试试这个

 SELECT name 
 FROM sys.objects 
 WHERE type='U' ORDER BY name
于 2013-07-26T02:59:49.730 回答
0

我找到了解决方案。希望这对其他人有帮助。在 MSSQL 数据库服务器或 Oracle 数据库服务器上访问多个模式时,全局配置必须关闭“quote_identifiers”选项才能使用数据库服务器的默认配置。

例如 config/autoload/global.php 将包含:

return array(
'db' => array(
    'driver'         => 'Pdo',
    'dsn'            => "sqlsrv:Server=DATABASE_SERVER;Database=DATABASE;",
    'charset'        => 'UTF-8',
    'pdotype'        => 'sqlsrv',
    'platform_options' => array('quote_identifiers' => false),
),);

现在我可以访问以 SCHEMA.TABLE 形式声明的表,例如 INFORMATION_SCHEMA.TABLES。

于 2013-08-06T15:54:22.053 回答
0

除此之外sys.objects,还可以使用sys.tables

SELECT
     name
FROM
    sys.tables AS t
ORDER BY
     name

如果您也需要架构,请检查此查询。

SELECT
    N'[' + s.name + N'].[' + o.name + ']'--I'm not sure what you are doing with your results, but I concatonated the schema with the table name
FROM
    sys.schemas AS s INNER JOIN sys.objects AS o
        ON
            s.schema_id = o.schema_id
WHERE
    o.type = N'U'
于 2013-07-26T12:29:14.643 回答
0

如果您使用 TableGateway,您可以使用 TableGateway Feature\MetadataFeature 轻松获取元数据。更多信息在这里-> https://zf2.readthedocs.org/en/latest/modules/zend.db.table-gateway.html#tablegateway-features

于 2013-07-26T17:12:43.823 回答