获取SQLSERVER所有库 所有表 所有列 所有字段信息

最近想起来做一个项目代码生成器,直接生成底层代码..

这免不了要先行读取数据库已有的信息..

废话不多说..开整..

SELECT NAME FROM MASTER..SYSDATABASES  --读取所有库

上边语句只得到单表单列..里边就全是数据库的名字..

然后选择数据库后..按此数据库连接重新链接数据库..执行以下语句

SELECT NAME FROM SYSOBJECTS WHERE TYPE=‘U‘  --读取所有表

上边语句依然是得到的单表单列,存储的值全不是当前选择的数据库中的表

用户选择..得到表名..

SELECT SC.Name --查询【列名】【类型】【长度】【描述】
    ,[TYPE] = ST.Name + CASE ST.user_type_id
    WHEN 41 THEN ‘(‘+CAST(SC.scale AS VARCHAR) +‘)‘                                       -- time
    WHEN 42 THEN ‘(‘+CAST(SC.scale AS VARCHAR) +‘)‘                                       -- datetime2
    WHEN 43 THEN ‘(‘+CAST(SC.scale AS VARCHAR) +‘)‘                                       -- datetimeoffset
    WHEN 106 THEN ‘(‘+CAST(SC.precision  AS VARCHAR)+‘,‘+ CAST(SC.scale AS VARCHAR) +‘)‘  -- decimal
    WHEN 108 THEN ‘(‘+CAST(SC.precision  AS VARCHAR)+‘,‘+ CAST(SC.scale AS VARCHAR) +‘)‘  -- numeric
    WHEN 165 THEN ‘(‘+ISNULL(CAST(NULLIF(SC.max_length,-1) AS VARCHAR),‘max‘) +‘)‘        -- varbinary
    WHEN 167 THEN ‘(‘+ISNULL(CAST(NULLIF(SC.max_length,-1) AS VARCHAR),‘max‘) +‘)‘        -- varchar
    WHEN 173 THEN ‘(‘+ISNULL(CAST(NULLIF(SC.max_length,-1) AS VARCHAR),‘max‘) +‘)‘        -- binary
    WHEN 175 THEN ‘(‘+ISNULL(CAST(NULLIF(SC.max_length,-1) AS VARCHAR),‘max‘) +‘)‘        -- char
    WHEN 231 THEN
        CASE SC.max_length
        WHEN -1 THEN ‘(max)‘
        ELSE ‘(‘+ISNULL(CAST(NULLIF(SC.max_length / 2,-1) AS VARCHAR),‘max‘) +‘)‘      -- nvarchar
        END
    WHEN 239 THEN ‘(‘+ISNULL(CAST(NULLIF(SC.max_length,-1) AS VARCHAR),‘max‘) +‘)‘     -- nchar
    ELSE ‘‘
    END
        ,CASE WHEN SC.Is_Nullable = 0 THEN ‘NOT NULL‘                                  --是否允许为空
        WHEN SC.Is_Nullable = 1 THEN ‘NULL‘
        ELSE ‘UNKNOWN‘ END IsNullable
,(SELECT SYS.EXTENDED_PROPERTIES.VALUE FROM SYSCOLUMNS
INNER JOIN SYS.EXTENDED_PROPERTIES ON SYSCOLUMNS.ID = SYS.EXTENDED_PROPERTIES.MAJOR_ID
AND SYSCOLUMNS.COLID = SYS.EXTENDED_PROPERTIES.MINOR_ID
INNER JOIN SYSOBJECTS ON SYSCOLUMNS.ID = SYSOBJECTS.ID
WHERE SYSOBJECTS.NAME = SO.NAME AND SYSCOLUMNS.NAME = SC.NAME) Description             --SO.NAME表名、SC.NAME列名
FROM SYS.COLUMNS SC,SYS.TYPES ST,SYS.SYSOBJECTS SO                                     --列名信息和表结构信息
WHERE SC.user_type_id = ST.user_type_id AND SC.object_id = SO.ID AND SO.XTYPE=‘U‘ AND SO.NAME=‘写入表名‘  

上边的语句是从网上复制过来的..先谢过那位大神了..

在语句中只要在最后写入表名..即可得到一张四列的表..分别是 字段名/字段类型/是否为空/备注

这四个东西基本上就是生成代码的最重要四个元素了..缺一不可..

在之后就是循环就好了..循环生成读模板..绑数据..

时间: 2024-10-11 01:32:08

获取SQLSERVER所有库 所有表 所有列 所有字段信息的相关文章

Sql中判断"库、表、列,视图,存储过程"是否存在

--判断数据库是否存在 IF EXISTS (SELECT * FROM MASTER.sys.sysdatabases WHERE NAME = '库名') PRINT 'exists ' else PRINT 'not exists' -- 判断要创建的表名是否存在 IF EXISTS (Select * From sysObjects Where Name ='表名' And Type In ('S','U')) PRINT 'exists' ELSE PRINT 'not exists'

SqlServer 聚集索引重建后变换列位置统计信息列名不变

原本是使用聚集索引主键发现的,确认不是主键问题,是聚集索引问题. version:Microsoft SQL Server 2008 R2 (SP1) -- 创建测试表 -- drop table [TestTable] create table [dbo].[TestTable]( [id] [int] not null, [name] [varchar](20) not null ) go -- 插入数据 insert into [TestTable]([id],[name]) select

SqlServer和Oracle判断表和列是否存在

SqlServer 1.判断表Users是否存在 if object_id(N'Users',N'U') is not null print '存在' else print '不存在' 2.判断表Users中是否存在Name这一列 if exists(select * from syscolumns where id=object_id('Users') and name='Name' collate Chinese_PRC_CI_AI_WS) print '存在' else print '不存

SQLServer在多个表中都增加一个字段的方法

1.使用游标 declare @sql varchar(200), @name varchar(40) declare my_cursor scroll cursor for select name from sysobjects where type = 'u' and name like 'jobs_%' open my_cursor fetch next from my_cursor into @name while(@@fetch_status=0) begin print 'proce

PCB MS SQL 通过表名查询各字段信息和vb.net C# module类代码

正式表:各字段内容获取 DECLARE @tabname VARCHAR(20) SET @tabname = 'ppeflow' SELECT @tabname AS '表名' ,(CASE WHEN T.name = 'varchar' or T.name = 'char' THEN T.name + '(' + CAST(COLUMNPROPERTY(C.id,C.name,'PRECISION') as VARCHAR(20))+ ')' WHEN T.name = 'numeric'

获取sqlserver数据库中所有库、表、字段名的方法

1.获取所有数据库名: SELECT Name from Master..SysDatabases ORDER BY Name 2.获取所有表名: SELECT Name from DatabaseName..SysObjects Where XType='U' ORDER BY Name XType='U':表示所有用户表; XType='S':表示所有系统表; 3.获取所有字段名: SELECT Name from SysColumns WHERE id=Object_Id('TableNa

SQLSERVER和ORACLE系统表获取表名 列名以及列的注释

在工作中从数据库取的数据要导出来,但是发现导出的EXCEL中列名都是字段名(英文),为此搜集资料怎么把字段名变为中文名称,而发现ORACLE和SQLSERVER(用的SQLSERVER2008R2)又有所不同,具体如下: SQLSERVER数据库: 系统表: ---获取表的相关信息              select * from SYS.OBJECTS  (说明:name:表名 object_id:表的ID)  ---获取列的相关信息 select * from SYS.COLUMNS (

SqlServer中获取所有数据库,所有表,所有字段

原文:SqlServer中获取所有数据库,所有表,所有字段 一.获取所有数据库 select * from master.dbo.SysDatabases 二.获取某个库中所有表 SELECT * FROM SysObjects Where XType='U' --XType='U':表示所有用户表; --XType='S':表示所有系统表; 三.获取某表中的字段,字段类型等 SELECT * FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='C

(转)数据库表分割技术浅析(水平分割/垂直分割/库表散列)

数据库表分割技术包含以下内容:水平分割/垂直分割/库表散列.接下来将对以上分割进行详细介绍,感兴趣的朋友可以了解下,对你日后维护数据库是很有帮助的 一.水平分割 什么是水平分割?打个比较形象的比喻,在食堂吃饭的时候,只有一个窗口,排队打饭的队伍太长了,都排成S型了,这时容易让排队的人产生焦虑情绪,容易产生混乱,这时一个管理者站出来,增加多个打饭窗口,把那条长长的队伍拦腰截断成几队.更形象一点的理解,你拿一把“手术刀”,把一个大表猛的切了几刀,结果这个大表,变成了几个小表. 水平分割根据某些条件将