blogspot.com-GA4

星期五, 5月 01, 2020

【MSSQL】查詢MSSQL 的資料欄位描述

查詢MSSQL 的資料欄位描述

--資料庫裏的所有欄位
SELECT * FROM Information_Schema.COLUMNS

--目前資料庫中的索引鍵。
SELECT * FROM Information_Schema.KEY_COLUMN_USAGE

--目前使用者在目前資料庫中可以存取的資料表
SELECT * FROM Information_Schema.TABLES

--目前資料庫中的資料表條件約束
SELECT * FROM Information_Schema.TABLE_CONSTRAINTS

--目前資料庫中的外部條件約束
SELECT * FROM Information_Schema.REFERENTIAL_CONSTRAINTS

--查詢資料庫 TABLE COLUMN 內容語法
--這是利用SQL函式查詢,::後面表示為函式
SELECT * FROM ::fn_listextendedproperty (NULL, 'user', 'dbo', 'table', N'table name', 'column', N'column name')

--最後整理出來查詢的TABLE比較接近平常我查詢ORCALE的方式
SELECT tab.name                   table_name,
       col.colid                  column_id,
       col.name                   column_name,
       typ.name                   data_type,
       col.prec                   PRECISION,
       col.scale                  scale,
       col.length,
       com.TEXT                   default_value,
       CASE
         WHEN col.isnullable = 1 THEN 'Y'
         ELSE 'N'
       END is_nullable,
       CASE
         WHEN col.status & 0X80 = 0X80 THEN 'Y'
         ELSE 'N'
       END is_identity,
       (SELECT VALUE
        FROM   Fn_listextendedproperty (NULL, 'schema', 'dbo', 'table',
               tab.name,'column', col.name)) DESCRIPTION
FROM   sysobjects tab
       LEFT OUTER JOIN syscolumns col ON(tab.id = col.id )
       LEFT OUTER JOIN syscomments com ON col.cdefault = com.id AND com.colid = 1
       LEFT OUTER JOIN sysobjects obj ON com.id = obj.id
       LEFT OUTER JOIN systypes typ ON(col.xusertype = typ.xusertype)
WHERE  tab.xtype = 'U'
  AND tab.name='TABL ENAME'


--使用以下指令查詢出要找的Table Schema
SELECT
    a.TABLE_NAME                as 表格名稱,
    b.COLUMN_NAME               as 欄位名稱,
    b.DATA_TYPE                 as 資料型別,
    b.CHARACTER_MAXIMUM_LENGTH  as 最大長度,
    b.COLUMN_DEFAULT            as 預設值,
    b.IS_NULLABLE               as 允許空值,
    (
        SELECT value
        FROM fn_listextendedproperty (NULL, 'schema', 'dbo', 'table', a.TABLE_NAME, 'column', default)
        WHERE name='MS_Description' and objtype='COLUMN'
            and objname Collate Chinese_Taiwan_Stroke_CI_AS=b.COLUMN_NAME
    ) as 欄位備註
FROM
    INFORMATION_SCHEMA.TABLES  a
    LEFT JOIN INFORMATION_SCHEMA.COLUMNS b ON (a.TABLE_NAME=b.TABLE_NAME)
WHERE TABLE_TYPE='BASE TABLE'
AND a.TABLE_NAME='TABL ENAME'
ORDER BY a.TABLE_NAME, ordinal_position