MetaColumns() для представления MS SQL?

Я пытаюсь использовать ADODB для работы с базой данных MS SQL, содержащей представления.MetaColumns() хорошо работает с таблицами, но возвращает пустой массив, когда я использую имя представления в качестве параметра. Дальнейшие исследования показывают, что $metaColumnsSQL использования sys.tables объект для разрешения имен столбцов, поэтому он не предназначен для представлений. Есть ли способ получить имена столбцов для объекта просмотра?

1 ответ

ADOdb не может предоставить объект metaColumns() для представления, потому что его основой является запрос схемы для объектов, связанных с одной таблицей.

Вы можете эмулировать metaColumns() с представлением, используя метод fetchField() следующим образом, используя NorthWind:

$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, но могут быть достаточными для ваших нужд.

Другие вопросы по тегам