透過 SQL 取得欄位類型
在各種資料庫場景中,了解表中特定欄位的資料類型至關重要。幸運的是,SQL 提供了一個全面的解決方案來透過 INFORMATION_SCHEMA.COLUMNS 視圖檢索列類型。此視圖提供有關資料庫表及其列的元數據,包括令人垂涎的資料類型資訊。
INFORMATION_SCHEMA.COLUMNS 中的 DATA_TYPE 欄位傳回該欄位的基本資料類型。但是,對於某些具有參數化選項(例如 nvarchar 或 datetime2)的資料類型,僅靠基本類型可能不足以完全描述列的特徵。
要解決此問題,可以參考檢視中的其他欄位。例如,二進位和 varbinary 的 CHARACTER_OCTET_LENGTH、char、nchar、varchar 和 nvarchar 的 CHARACTER_MAXIMUM_LENGTH、datetime2 和 datetimeoffset 的 DATETIME_PRECISION、以及decimal 和 numeric 資料類型的 NUMERPMERTIME_PRECISION、以及decimal 和 numeric 資料類型的 NUMERPMERPMERPMERIM_DA 的資料類型重建所需的資訊。
由引用這些補充列並將它們的值與基本資料類型結合,您可以獲得列類型的精確描述。以下範例查詢示範了此過程:
WITH q AS ( SELECT c.TABLE_SCHEMA, c.TABLE_NAME, c.ORDINAL_POSITION, c.COLUMN_NAME, c.DATA_TYPE, CASE WHEN c.DATA_TYPE IN ( N'binary', N'varbinary' ) THEN ( CASE c.CHARACTER_OCTET_LENGTH WHEN -1 THEN N'(max)' ELSE CONCAT( N'(', c.CHARACTER_OCTET_LENGTH , N')' ) END ) WHEN c.DATA_TYPE IN ( N'char', N'varchar', N'nchar', N'nvarchar' ) THEN ( CASE c.CHARACTER_MAXIMUM_LENGTH WHEN -1 THEN N'(max)' ELSE CONCAT( N'(', c.CHARACTER_MAXIMUM_LENGTH, N')' ) END ) WHEN c.DATA_TYPE IN ( N'datetime2', N'datetimeoffset' ) THEN CONCAT( N'(', c.DATETIME_PRECISION, N')' ) WHEN c.DATA_TYPE IN ( N'decimal', N'numeric' ) THEN CONCAT( N'(', c.NUMERIC_PRECISION , N',', c.NUMERIC_SCALE, N')' ) END AS DATA_TYPE_PARAMETER, CASE c.IS_NULLABLE WHEN N'NO' THEN N' NOT NULL' WHEN N'YES' THEN N' NULL' END AS IS_NULLABLE2 FROM INFORMATION_SCHEMA.COLUMNS AS c ) SELECT q.TABLE_SCHEMA, q.TABLE_NAME, q.ORDINAL_POSITION, q.COLUMN_NAME, CONCAT( q.DATA_TYPE, ISNULL( q.DATA_TYPE_PARAMETER, N'' ), q.IS_NULLABLE2 ) AS FULL_DATA_TYPE FROM q WHERE q.TABLE_SCHEMA = 'yourSchemaName' AND q.TABLE_NAME = 'yourTableName' AND q.COLUMN_NAME = 'yourColumnName' ORDER BY q.TABLE_SCHEMA, q.TABLE_NAME, q.ORDINAL_POSITION;
此查詢精心地將完整的資料類型資訊(包括參數值和可為空狀態)組裝到 FULL_DATA_TYPE 列中。透過執行此查詢,您可以檢索特定列的確切資料類型並更深入地了解您的資料庫架構。
以上是如何檢索 SQL 列的精確資料類型(包括參數和可為空性)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!