使用SQLSRV_FIELD_METADATA有没有办法返回全名数据类型,如VARCHAR或INT?

时间:2013-05-10 14:05:49

标签: php sql-server sql-server-2000 sqlsrv

亲爱的互联网聪明人,

在SQL Server 2000上使用SQLSRV我试图使用SQLSRV_FIELD_METADATA函数回显列数据类型和长度,但只传递一个表示数据类型的数字。

以下是代码:

  echo '<pre>';
  echo '<ul>';
    foreach( sqlsrv_field_metadata( $stmt ) as $fieldMetadata ) {
        foreach( $fieldMetadata as $name => $value) {
           echo "<li>$name: $value</li>";
        }
        echo "<br/>";
    }
  echo '</ul>';
  echo '</pre>';

以下是输出的摘录:

Name: UNITID
Type: 4
Size: 
Precision: 10
Scale: 
Nullable: 0

Name: STOCKNUMBER
Type: 12
Size: 30
Precision: 
Scale: 
Nullable: 1

有没有办法将Type:4和Type:12转换为列的实际名称?所以它会返回Type:INT,Type = VARCHAR。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

@Esorteric,谢谢你的提示。我已经实现了一个充当类型映射的函数:

  function returnType($value) {
    switch ($value) {
        case 4:
            return "(4) SQLDMO_DTypeInt4 :: Signed integer data. The width of the integer is four bytes.";
            break;
        case 12:
            return "(12) SQLDMO_DTypeVarchar :: Variable-length character data.";
            break;
        case 93:
            return "(93) SQLDMO_DTypeDateTime4 :: ODBC SQL_TIMESTAMP_STRUCT.";
            break;
        case 5:
            return "(5) SQLDMO_DTypeInt2 :: Signed integer data. The width of the integer is two bytes.";
            break;
        case -6:
            return "(-6) SQLDMO_DTypeInt1 :: Unsigned integer data. The width of the integer is one byte.";
            break;  
        case -1:
            return "(-1) SQLDMO_DTypeText :: Long, variable-length character data.";
            break;                      
    }     

  }