你如何查询MYSQL数据库information_schema

时间:2013-07-25 21:45:48

标签: sql-server pdo zend-framework2

我正在将应用程序重新编写到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 个答案:

答案 0 :(得分:1)

此查询还为您提供了所有表格。请尝试此

 SELECT name 
 FROM sys.objects 
 WHERE type='U' ORDER BY name

答案 1 :(得分: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'

答案 2 :(得分:0)

如果您使用的是TableGateway,则可以使用TableGateway Feature \ MetadataFeature轻松获取元数据。更多相关内容 - > https://zf2.readthedocs.org/en/latest/modules/zend.db.table-gateway.html#tablegateway-features

答案 3 :(得分: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。