用于MS SQL视图的MetaColumns()?

时间:2016-05-12 18:49:16

标签: adodb-php

我正在尝试使用ADODB来处理包含视图的MS SQL数据库。 MetaColumns()适用于表,但当我使用视图名作为参数时返回一个空数组。进一步的研究表明,$metaColumnsSQL使用sys.tables对象来解析列名,因此它似乎并不适用于视图。有没有办法获取视图对象的列名?

1 个答案:

答案 0 :(得分:0)

ADOdb无法为视图提供metaColumns()对象,因为它的基础是查询与单个表关联的对象的架构。

使用NorthWind可以使用fetchField()方法模拟带有视图的metaColumns():

$SQL = " CREATE VIEW vEmpTerritories AS
    SELECT employees.employeeId, EmployeeTerritories.TerritoryId
      FROM employees, EmployeeTerritories 
     WHERE EmployeeTerritories.employeeId = employees.employeeId";


$db->execute($SQL);
$SQL = "SELECT * FROM vEmpTerritories"; 

$f = $db->execute($SQL);

$recordSet = $db->Execute($SQL);
$cols = $recordSet->fieldCount();
for($i=0;$i<$cols;$i++){
    $fld = $recordSet->FetchField($i);
    print_r($fld);

}

这将返回一个ADOfieldObjects数组,其中包含有关每列的基本信息:

ADOFieldObject Object
(
    [name] => employeeId
    [max_length] => 
    [type] => int
    [column_source] => employeeId
)
ADOFieldObject Object
(
    [name] => TerritoryId
    [max_length] => 20
    [type] => nvarchar
    [column_source] => TerritoryId
)

不幸的是,从fetchfield()返回的数据不像metaColumns那样详细,但它可能足以满足您的需求。