Great God from his colleagues learned about the investigation of the SQL database information, record it, pending a look back.
Use the SQL server2017
field is the basis of the following query, if there is a need to continue append additional fields.
SELECT
A.TABLE_NAME, -- 表名
TBLINFO.CMD, -- 表注释
A.ORDINAL_POSITION, -- 字段位置
A.COLUMN_NAME, -- 列名
A.DATA_TYPE, -- 类型
CASE
WHEN UPPER(A.DATA_TYPE) = 'DATETIMEOFFSET' THEN CONVERT(VARCHAR(100),A.DATETIME_PRECISION)
WHEN UPPER(A.DATA_TYPE) = 'NVARCHAR' THEN CONVERT(VARCHAR(100),A.CHARACTER_MAXIMUM_LENGTH)
WHEN UPPER(A.DATA_TYPE) = 'CHAR' THEN CONVERT(VARCHAR(100),A.CHARACTER_MAXIMUM_LENGTH)
WHEN UPPER(A.DATA_TYPE) = 'NCHAR' THEN CONVERT(VARCHAR(100),A.CHARACTER_MAXIMUM_LENGTH)
WHEN UPPER(A.DATA_TYPE) = 'DATETIME2' THEN CONVERT(VARCHAR(100),A.DATETIME_PRECISION)
WHEN UPPER(A.DATA_TYPE) = 'DECIMAL' THEN CONVERT(VARCHAR(100),A.NUMERIC_PRECISION) + ',' +CONVERT(VARCHAR(100),A.NUMERIC_SCALE)
ELSE ''
END AS LENGTH, -- 长度
CASE
WHEN B.COLUMN_NAME IS NULL THEN 'NO'
ELSE 'YES'
END AS PK, -- 是否为主键(YES:是, NO:不是)
A.IS_NULLABLE, -- 是否可为空(YES:可, NO:不可)
COLINFO.CMD -- 字段注释
FROM INFORMATION_SCHEMA.COLUMNS AS A -- 表字段信息
LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS B -- 索引列上的约束信息
ON A.TABLE_SCHEMA = B.TABLE_SCHEMA
AND A.TABLE_NAME = B.TABLE_NAME
AND A.COLUMN_NAME = B.COLUMN_NAME
LEFT JOIN (
SELECT TBL.name, INFO.minor_id, INFO.value AS CMD
FROM SYS.EXTENDED_PROPERTIES AS INFO -- 扩展属性
LEFT JOIN sysobjects TBL -- 系统对象表
ON INFO.major_id = TBL.id
WHERE INFO.minor_id = 0
) AS TBLINFO
ON A.TABLE_NAME = TBLINFO.name
LEFT JOIN (
SELECT TBL.name, INFO.minor_id, INFO.value AS CMD
FROM SYS.EXTENDED_PROPERTIES AS INFO -- 扩展属性
LEFT JOIN sysobjects TBL -- 系统对象表
ON INFO.major_id = TBL.id
) AS COLINFO
ON A.TABLE_NAME = COLINFO.name
AND A.ORDINAL_POSITION = COLINFO.minor_id
WHERE
A.TABLE_SCHEMA = '{schemaName}'
AND A.TABLE_NAME = '{tableName}'
ORDER BY A.TABLE_SCHEMA,A.TABLE_NAME,A.ORDINAL_POSITION