SQL脚本获取指定SQLServer数据库所有表及视图的字段列表及类型、长度

时间:2022-07-14 16:22:36

今天在客户这里发布更新版本的Socket程序,此次发布的更新版本因为涉及修改的地方比较多,程序方面有,数据库方面也有。程序都有版本控制,相对比较容易控制检查。但是数据库方面由于之前没有加入版本控制,所以检查起来就比较难了。起初考虑将正式系统数据库和测试系统数据库都导出一份生成脚本,用于进行比对,但是导出之后发现生成的顺序不同,上兆的文件没有办法进行比对。

 

由于此次升级主要是新增,所以记得只是新增加了两个表,修改了几个表中的已有字段长度,并增加了字段,所以考虑自己写一个脚本用于将数据库中所有表及字段的名称、类型及长度都显示出来然后进行比对。

 

大概的思路就是利用系统表中存储的信息来进行数据库结构获取,相对还是比较简单的。脚本如下:

 

Select o.Name As ObjectsName , c.name As ColumnsName , t.name As ColumnsType , c.length As ColumnsLength
From SysObjects As o , SysColumns As c , SysTypes As t
Where o.type in ('u','v') And o.id = c.id And c.xtype = t.xtype
Order By o.name , c.name , t.name , c.Length

 

 

下面简要说明一下:

SysObjects
在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。

SysColumns
每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。

SysTypes

每种数据类型和用户定义数据类型的详细信息。

 

更加详细的内容就不多写了,网络上一搜就到处都是,自己备注一下,下次更新还能用得到。呵呵