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