Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengambil Jenis Data Lajur Lengkap Termasuk Parameter dan Kebolehnulan dalam SQL?

Bagaimana untuk Mengambil Jenis Data Lajur Lengkap Termasuk Parameter dan Kebolehnulan dalam SQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-28 03:50:10414semak imbas

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

Cara Mengambil Jenis Lajur Menggunakan SQL

Dalam sistem pengurusan pangkalan data hubungan moden (RDBMS), mendapatkan maklumat jenis lajur untuk jadual tertentu adalah keperluan biasa. Untuk menangani keperluan ini, paparan INFORMATION_SCHEMA.COLUMNS, disokong secara meluas dalam ISO SQL, menyediakan mekanisme piawai untuk mendapatkan semula metadata lajur, termasuk jenis datanya.

Lajur DATA_TYPE dalam paparan INFORMATION_SCHEMA.COLUMNS memaparkan asas T -SQL/SQL Nama jenis Pelayan, seperti nvarchar, datetime2 dan perpuluhan. Walau bagaimanapun, ia tidak termasuk argumen parameter untuk jenis parameter. Peninggalan ini boleh membawa kepada gelagat lajur yang tidak diingini.

Untuk mengurangkan isu ini, adalah penting untuk memanfaatkan lajur tambahan, seperti CHARACTER_OCTET_LENGTH (untuk binari), CHARACTER_MAXIMUM_LENGTH (untuk char dan nchar), DATETIME_PRECISION (untuk datetime2 dan datetimeoffset , dan NUMERIC_PRECISION dan NUMERIC_SCALE (untuk perpuluhan dan angka). Dengan menggabungkan nilai ini, anda boleh membina semula jenis lengkap, termasuk parameternya.

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;

Pertanyaan ini menghasilkan hasil yang merangkumi jenis data lengkap, termasuk maklumat parameter dan kebolehbatalan, seperti yang digambarkan di bawah:

[Imej hasil pertanyaan]

Atas ialah kandungan terperinci Bagaimana untuk Mengambil Jenis Data Lajur Lengkap Termasuk Parameter dan Kebolehnulan dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn