0

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

4

1 回答 1

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 详细,但它可能足以满足您的需求。

于 2016-05-24T23:31:09.610 回答