首頁 >資料庫 >mysql教程 >如何在 SQL 中檢索完整的列資料類型(包括參數和可為空性)?

如何在 SQL 中檢索完整的列資料類型(包括參數和可為空性)?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-28 03:50:10414瀏覽

How to Retrieve Complete Column Data Types Including Parameters and Nullability in SQL?

如何使用 SQL 檢索列類型

在現代關係資料庫管理系統(RDBMS)中,取得特定表的列類型資訊是一個常見的需求。為了滿足這一需求,ISO SQL 中廣泛支援的 INFORMATION_SCHEMA.COLUMNS 視圖提供了一種標準化機制來檢索列元數據,包括其資料類型。

INFORMATION_SCHEMA.COLUMNS 檢視中的 DATA_TYPE 欄位顯示基本 T -SQL/SQL Server 類型名稱,例如 nvarchar、datetime2 和decimal。但是,它不包括參數化類型的形參參數。此遺漏可能會導致意外的列行為。

為了緩解此問題,必須利用其他資料列,例如 CHARACTER_OCTET_LENGTH(對於二進位)、CHARACTER_MAXIMUM_LENGTH(對於 char 和 nchar)、DATETIME_PRECISION(對於 datetime2 和 datetimeoffset) 、NUMERPMERIS 、MMERISA.透過組合這些值,您可以重建完整的類型,包括其參數。

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;

此查詢產生包含完整資料類型的結果,包括參數資訊和可為空性,如下所示:

[查詢結果圖片]

以上是如何在 SQL 中檢索完整的列資料類型(包括參數和可為空性)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn