给SQL补充一个查看表结构的存储过程
2012-04-12 16:31
323 查看
数据库中表太多,要查看某个表的结构比较费劲,用此存储过程比较方便;
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
相关文章推荐
- 给SQL补充一个查看表结构的存储过程
- 在sql server中如何用sql语句查看表结构/存储过程信息
- syscomments 系统表结构 Transact-SQL 参考 及查看未加密存储过程
- 用SQL语句生成某个库下所有存储过程脚本,并每个存为一个文件
- 在SQL*PLUS下的存储过程的一个应用
- 一个查看MSSQLServer数据库空间使用情况的存储过程 SpaceUsed
- SQL 查看死锁情况的存储过程
- SqlServer中Sql查看存储过程
- sql数据库相关:查看存储过程的内置函数和手写的查看表结构存储过程
- 一个SQL存储过程面试题(比较简单)
- SQL查看存储过程相关信息
- SQL怎么查看和删除存储过程
- 得用SQL语句生成某个库下所有存储过程脚本,并每个存为一个文件
- 一个项目中正在使用的SQL分页存储过程
- 一个很复杂SQL存储过程的编写
- 一个简单的SQl存储过程分页
- 一个存储过程:带参数动态执行sql语句:Execute Immediate
- 使用oracle 的 PL/Sql 定时执行一个存储过程
- SQL查看数据库中包含临时表的所有存储过程
- SQL存储过程相关信息查看