sqlsrv_field_metadata
針對已備妥之陳述式的欄位擷取中繼資料。如需有關準備陳述式的詳細資訊,請參閱<sqlsrv_query>或<sqlsrv_prepare>。請注意,可以在任何備妥的陳述式上呼叫 sqlsrv_field_metadata (執行前或執行後)。
語法
sqlsrv_field_metadata( resource $stmt)
參數
$stmt:搜尋欄位中繼資料所針對的陳述式資源。
傳回值
陣列的 array 或 false。陣列是由結果集內每個欄位的一個陣列所組成。每一個子陣列都有索引鍵,如下表所述。如果擷取欄位中繼資料時發生錯誤,就會傳回 false。
索引鍵 | 描述 |
---|---|
Name |
此欄位所對應的資料行名稱。 |
Type |
對應到 SQL 類型的數值。 |
Size |
字元類型 (char(n)、varchar(n)、nchar(n)、nvarchar(n)、XML) 之欄位的字元數。二進位類型 (binary(n)、varbinary(n)、UDT) 之欄位的位元組數。NULL 代表其他 SQL Server 資料類型。 |
Precision |
可變有效位數之類型 (real、numeric、decimal、datetime2、datetimeoffset 和 time) 的有效位數。NULL 代表其他 SQL Server 資料類型。 |
Scale |
可變小數位數之類型 (numeric、decimal、datetime2、datetimeoffset 和 time) 的小數位數。NULL 代表其他 SQL Server 資料類型。 |
Nullable |
指出此資料行可為 Null (SQLSRV_NULLABLE_YES)、此資料行不可為 Null (SQLSRV_NULLABLE_NO) 或是不知道此資料行是否可為 Null (SQLSRV_NULLABLE_UNKNOWN) 的列舉值。 |
下表針對每個子陣列的索引鍵提供詳細資訊 (如需有關這些類型的詳細資訊,請參閱 SQL Server 文件集):
SQL Server 2008 資料類型 | 類型 | 最小/最大有效位數 | 最小/最大小數位數 | 大小 |
---|---|---|---|---|
bigint |
-5 |
8 |
||
binary |
-2 |
0 < n < 8000 1 |
||
bit |
-7 |
|||
char |
1 |
0 < n < 8000 1 |
||
date |
91 |
10/10 |
0/0 |
|
datetime |
93 |
23/23 |
3/3 |
|
datetime2 |
93 |
19/27 |
0/7 |
|
datetimeoffset |
-155 |
26/34 |
0/7 |
|
decimal |
3 |
1/38 |
0/有效位數值 |
|
float |
6 |
4/8 |
||
image |
-4 |
2 GB |
||
int |
4 |
|||
money |
3 |
19/19 |
4/4 |
|
nchar |
-8 |
0 < n < 4000 1 |
||
ntext |
-10 |
1 GB |
||
numeric |
2 |
1/38 |
0/有效位數值 |
|
nvarchar |
-9 |
0 < n < 4000 1 |
||
real |
7 |
4/4 |
||
smalldatetime |
93 |
16/16 |
0/0 |
|
smallint |
5 |
2 位元組 |
||
smallmoney |
3 |
10/10 |
4/4 |
|
text |
-1 |
2 GB |
||
time |
-154 |
8/16 |
0/7 |
|
timestamp |
-2 |
8 位元組 |
||
tinyint |
-6 |
1 位元組 |
||
udt |
-151 |
變數 |
||
uniqueidentifier |
-11 |
16 |
||
varbinary |
-3 |
0 < n < 8000 1 |
||
varchar |
12 |
0 < n < 8000 1 |
||
xml |
-152 |
0 |
(1) 零 (0) 表示允許最大的大小。
可為 Null 的索引鍵可以是 yes 或 no。
範例
下列範例會建立陳述式資源,然後擷取及顯示欄位中繼資料。此範例假設 SQL Server 和 AdventureWorks 資料庫已經安裝在本機電腦上。當從命令列執行此範例時,所有輸出都會寫入主控台。
<?php
/* Connect to the local server using Windows Authentication and
specify the AdventureWorks database as the database in use. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"AdventureWorks");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
echo "Could not connect.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Prepare the statement. */
$tsql = "SELECT ReviewerName, Comments FROM Production.ProductReview";
$stmt = sqlsrv_prepare( $conn, $tsql);
/* Get and display field metadata. */
foreach( sqlsrv_field_metadata( $stmt) as $fieldMetadata)
{
foreach( $fieldMetadata as $name => $value)
{
echo "$name: $value\n";
}
echo "\n";
}
/* Note: sqlsrv_field_metadata can be called on any statement
resource, pre- or post-execution. */
/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>