我正在将应用程序重新编写到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'。
是否有必须编码的特殊方式?我可以整天查询标准数据库表,没有问题。
提前感谢任何建议。
答案 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。