给SQL补充一个查看表结构的存储过程
数据库中表太多,要查看某个表的结构比较费劲,用此存储过程比较方便;
CRM
/********************************************
* 根据表名得到表信息,包括字段说明
********************************************/
CREATE PROC [dbo].[sp_help_table]
(@tableName VARCHAR(200), @ColumnLike VARCHAR(200) = NULL)
AS
--如果表名不存在,就直接选出相似表
IF NOT EXISTS(
SELECT 1
FROM sysobjects
WHERE id = OBJECT_ID(@tableName)
AND TYPE = 'U'
)
BEGIN
SELECT NAME FROM sysobjects
WHERE NAME LIKE '%' + @tableName + '%' AND TYPE = 'U'
RETURN
END
--筛选相似列名
IF (@ColumnLike IS NULL)
SET @ColumnLike = ''
DECLARE @ColumnTable TABLE(cName VARCHAR(200))
INSERT @ColumnTable
(
cName
)
SELECT a.name
FROM syscolumns a,sysobjects d
WHERE a.id = d.id
AND d.name = @tableName
AND a.name LIKE '%' + @ColumnLike + '%'
--查询表结构信息
SELECT 表名 = CASE
WHEN a.colorder = 1 THEN d.name
ELSE ''
END,
表说明 = CASE
WHEN a.colorder = 1 THEN ISNULL(f.value, '')
ELSE ''
END,
字段序号 = a.colorder,
字段名 = a.name,
字段说明 = ISNULL(g.[value], ''),
标识 = CASE
WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN '√'
ELSE ''
END,
主键 = CASE
WHEN EXISTS(
SELECT 1 FROM sysobjects WHERE xtype = 'PK' AND parent_obj = a.id
AND NAME IN (SELECT NAME FROM sysindexes
WHERE indid IN (SELECT indid FROM sysindexkeys
WHERE id = a.id AND colid = a.colid))
) THEN '√'
ELSE ''
END,
类型 = b.name,
占用字节数 = a.length,
长度 = COLUMNPROPERTY(a.id, a.name, 'PRECISION'),
小数位数 = ISNULL(COLUMNPROPERTY(a.id, a.name, 'Scale'), 0),
允许空 = CASE WHEN a.isnullable = 1 THEN '√'
ELSE ''
END,
默认值 = ISNULL(e.text, '')
FROM syscolumns a
LEFT JOIN systypes b
ON a.xusertype = b.xusertype
INNER JOIN sysobjects d
ON a.id = d.id
AND d.xtype = 'U'
AND d.name <> 'dtproperties'
LEFT JOIN syscomments e
ON a.cdefault = e.id
LEFT JOIN sys.extended_properties g
ON a.id = g.major_id
AND a.colid = g.minor_id
LEFT JOIN sys.extended_properties f
ON d.id = f.major_id
AND f.minor_id = 0
--where d.name='要查询的表' --如果只查询指定表,加上此条件
WHERE d.name = @tableName
AND EXISTS(
SELECT 1
FROM @ColumnTable
WHERE cname = a.name
)
ORDER BY a.id,a.colorder
CRM
/********************************************
* 根据表名得到表信息,包括字段说明
********************************************/
CREATE PROC [dbo].[sp_help_table]
(@tableName VARCHAR(200), @ColumnLike VARCHAR(200) = NULL)
AS
--如果表名不存在,就直接选出相似表
IF NOT EXISTS(
SELECT 1
FROM sysobjects
WHERE id = OBJECT_ID(@tableName)
AND TYPE = 'U'
)
BEGIN
SELECT NAME FROM sysobjects
WHERE NAME LIKE '%' + @tableName + '%' AND TYPE = 'U'
RETURN
END
--筛选相似列名
IF (@ColumnLike IS NULL)
SET @ColumnLike = ''
DECLARE @ColumnTable TABLE(cName VARCHAR(200))
INSERT @ColumnTable
(
cName
)
SELECT a.name
FROM syscolumns a,sysobjects d
WHERE a.id = d.id
AND d.name = @tableName
AND a.name LIKE '%' + @ColumnLike + '%'
--查询表结构信息
SELECT 表名 = CASE
WHEN a.colorder = 1 THEN d.name
ELSE ''
END,
表说明 = CASE
WHEN a.colorder = 1 THEN ISNULL(f.value, '')
ELSE ''
END,
字段序号 = a.colorder,
字段名 = a.name,
字段说明 = ISNULL(g.[value], ''),
标识 = CASE
WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN '√'
ELSE ''
END,
主键 = CASE
WHEN EXISTS(
SELECT 1 FROM sysobjects WHERE xtype = 'PK' AND parent_obj = a.id
AND NAME IN (SELECT NAME FROM sysindexes
WHERE indid IN (SELECT indid FROM sysindexkeys
WHERE id = a.id AND colid = a.colid))
) THEN '√'
ELSE ''
END,
类型 = b.name,
占用字节数 = a.length,
长度 = COLUMNPROPERTY(a.id, a.name, 'PRECISION'),
小数位数 = ISNULL(COLUMNPROPERTY(a.id, a.name, 'Scale'), 0),
允许空 = CASE WHEN a.isnullable = 1 THEN '√'
ELSE ''
END,
默认值 = ISNULL(e.text, '')
FROM syscolumns a
LEFT JOIN systypes b
ON a.xusertype = b.xusertype
INNER JOIN sysobjects d
ON a.id = d.id
AND d.xtype = 'U'
AND d.name <> 'dtproperties'
LEFT JOIN syscomments e
ON a.cdefault = e.id
LEFT JOIN sys.extended_properties g
ON a.id = g.major_id
AND a.colid = g.minor_id
LEFT JOIN sys.extended_properties f
ON d.id = f.major_id
AND f.minor_id = 0
--where d.name='要查询的表' --如果只查询指定表,加上此条件
WHERE d.name = @tableName
AND EXISTS(
SELECT 1
FROM @ColumnTable
WHERE cname = a.name
)
ORDER BY a.id,a.colorder
作者:阿笨
【官方QQ一群:跟着阿笨一起玩NET(已满)】:422315558
【官方QQ二群:跟着阿笨一起玩C#(已满)】:574187616
【官方QQ三群:跟着阿笨一起玩ASP.NET(已满)】:967920586
【官方QQ四群:Asp.Net Core跨平台技术开发(可加入)】:829227829
【官方QQ五群:.NET Core跨平台开发技术(可加入)】:647639415
【网易云课堂】:https://study.163.com/provider/2544628/index.htm?share=2&shareId=2544628
【腾讯课堂】:https://abennet.ke.qq.com
【51CTO学院】:https://edu.51cto.com/sd/66c64
【微信公众号】:微信搜索:跟着阿笨一起玩NET