2016-05-12 16 views
0

ADODBを使用して、ビューを含むMS SQLデータベースを操作しようとしています。 MetaColumns()はテーブルでうまく動作しますが、ビュー名をパラメータとして使用すると空の配列を返します。さらに調査したところ、$metaColumnsSQLsys.tablesオブジェクトを使用して列名を解決しているため、ビュー用ではないようです。ビューオブジェクトの列名を取得する方法はありますか?MS SQLビューのMetaColumns()?

答えて

0

ADOdbは、単一の表に関連付けられたオブジェクトのスキーマの問合せであるため、ビューのmetaColumns()オブジェクトを提供できません。

あなたは、Northwindを次のように、fetchField()方法を用いて使用してビューとmetaColumns()をエミュレートすることができる:

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

$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の配列を返します

残念ながら、fetchfield()から返されるデータはmetaColumnsほど詳細ではありませんが、必要であれば十分です。