首頁 > 資料庫 > mysql教程 > 如何取得包含參數的SQL列的完整資料類型?

如何取得包含參數的SQL列的完整資料類型?

DDD
發布: 2024-12-27 18:58:14
原創
387 人瀏覽過

How to Get the Complete Data Type of a SQL Column Including Parameters?

取得 SQL 中的欄位類型

要取得表格中特定欄位的資料類型,可以使用 INFORMATION_SCHEMA.COLUMNS 系統看法。 ISO SQL(包括 SQL Server)支援此視圖。

INFORMATION_SCHEMA.COLUMNS 檢視中的 DATA_TYPE 欄位提供基本的 SQL Server/T-SQL 類型名稱。但是,請注意,此資訊可能不包含參數化類型的參數,這在某些情況下可能會導致意外行為。

例如,考慮資料類型為 nvarchar(max)、datetime2(3) 和 的三列小數(10,5)。對應的 INFORMATION_SCHEMA.COLUMNS 輸出將只顯示 nvarchar、datetime2 和十進位。

要完全重建類型的參數值,建議檢查 INFORMATION_SCHEMA.COLUMNS 視圖中的其他欄位:

  • CHARACTER_OCTET_LENGTH(對於二進位)
  • CHARLTER nchar)
  • DATETIME_PRECISION(對於 datetime2 和 datetimeoffset)
  • NUMERIC_PRECISION 和 NUMERIC_SCALE(對於十進位和數字)

對於查詢示範如何擷取特定列的詳細資料類型:
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;
登入後複製

此查詢傳回以下格式的結果:
TABLE_SCHEMA | TABLE_NAME | ORDINAL_POSITION | COLUMN_NAME | FULL_DATA_TYPE
yourSchemaName | yourTableName | 1 | yourColumnName | nvarchar(max) NOT NULL
登入後複製

以上是如何取得包含參數的SQL列的完整資料類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板