2016-05-12 2 views
0

J'essaie d'utiliser ADODB pour travailler avec une base de données MS SQL contenant des vues. MetaColumns() fonctionne bien avec les tables, mais renvoie un tableau vide lorsque j'utilise un nom de vue comme paramètre. D'autres recherches montrent que $metaColumnsSQL utilise l'objet sys.tables pour résoudre les noms de colonne, il ne semble donc pas être destiné aux vues. Est-il possible d'obtenir des noms de colonnes pour un objet de vue?MetaColumns() pour une vue MS SQL?

Répondre

0

ADOdb ne peut pas fournir un objet metaColumns() pour une vue car sa base est l'interrogation du schéma pour les objets associés à une seule table.

Vous pouvez émuler metaColumns() en vue en utilisant la méthode fetchField() comme suit, en utilisant 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); 

} 

Cela renvoie un tableau de ADOfieldObjects avec des informations de base sur chaque colonne:

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

Malheureusement, les données renvoyées par fetchfield() ne sont pas aussi détaillées que celles de metaColumns, mais elles peuvent suffire à vos besoins.