zoukankan      html  css  js  c++  java
  • MS SQL 获取数据库名,表名,列名,说明等信息(SQL Server 2005 测试通过)

    /**************************************************************************************************************
    、获取所有用户名:
    islogin='1'   :表示帐户
    islogin='0'   :表示角色
    status='2'   :表示用户帐户
    status='0'   :表示系统帐户
    **************************************************************************************************************/
    SELECT name
    FROM   sysusers
    WHERE  status = '0'
           AND islogin = '1'
    /**************************************************************************************************************
    、获取所有数据库名:
    **************************************************************************************************************/
    SELECT name
    FROM     master..sysdatabases
    ORDER BY name
    /**************************************************************************************************************
    、获取所有表名:
    XType='U'    :表示所有用户表;
    XType='S'    :表示所有系统表;
    **************************************************************************************************************/
    SELECT name
    FROM     数据库名..sysobjects
    WHERE    xtype = 'U'
    ORDER BY name
    /**************************************************************************************************************
    、获取所有字段名:
    **************************************************************************************************************/
    SELECT name
    FROM   syscolumns
    WHERE  id = Object_id('表名')
    /**************************************************************************************************************
    、获取数据库所有类型:
    **************************************************************************************************************/
    SELECT name
    FROM   systypes
    /**************************************************************************************************************
    、获取主键字段:
    **************************************************************************************************************/
    SELECT name
    FROM   syscolumns
    WHERE  id = Object_id('表名')
           AND colid = (SELECT TOP 1 keyno
                        FROM   sysindexkeys
                        WHERE  id = Object_id('表名'))
    /**************************************************************************************************************
    、获取表字段的基本信息:
    a.
    **************************************************************************************************************/
    SELECT 字段名 = Rtrim(b.name)
           ,主键 = CASE 
                   WHEN h.id IS NOT NULL THEN 'PK'
                   ELSE ''
                 END
           ,字段类型 = Type_name(b.xusertype)
                    + CASE 
                        WHEN b.colstat & 1 = 1 THEN '[ID('
                                                     + CONVERT(VARCHAR,Ident_seed(a.name))
                                                     + ','
                                                     + CONVERT(VARCHAR,Ident_incr(a.name))
                                                     + ')]'
                        ELSE ''
                      END
           ,长度 = b.length
           ,允许空 = CASE b.isnullable 
                    WHEN 0 THEN 'N'
                    ELSE 'Y'
                  END
           ,默认值 = Isnull(e.TEXT,'')
           ,字段说明 = Isnull(c.VALUE,'')
    FROM     sysobjects a
             INNER JOIN  sys.all_objects aa
               ON a.id=aa.object_id 
                  AND  schema_name(schema_id)='dbo'
             ,syscolumns b
             LEFT OUTER JOIN sys.extended_properties c
               ON b.id = c.major_id
                  AND b.colid = c.minor_id
             LEFT OUTER JOIN syscomments e
               ON b.cdefault = e.id
             LEFT OUTER JOIN (SELECT g.id
                                     ,g.colid
                              FROM   sysindexes f
                                     ,sysindexkeys g
                              WHERE  (f.id = g.id)
                                     AND (f.indid = g.indid)
                                     AND (f.indid > 0)
                                     AND (f.indid < 255)
                                     AND (f.status & 2048) <> 0) h
               ON (b.id = h.id)
                  AND (b.colid = h.colid)
    WHERE    (a.id = b.id)
             AND (a.id = Object_id('表名'))  --要查询的表改成你要查询表的名称
    ORDER BY b.colid
    /**************************************************************************************************************
    b.
    **************************************************************************************************************/
    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
           ,标识 = CASE 
                   WHEN Columnproperty(a.id,a.name,'IsIdentity') = 1 THEN ''
                   ELSE ''
                 END
           ,主键 = CASE 
                   WHEN EXISTS (SELECT 1
                                FROM   sysobjects
                                WHERE  xtype = 'PK'
                                       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,'')
           ,字段说明 = Isnull(g.[value],'')
    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') 
              INNER JOIN  sys.all_objects c
                ON d.id=c.object_id 
                    AND  schema_name(schema_id)='dbo'
             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='要查询的表'         --如果只查询指定表,加上此条件
    ORDER BY a.id
             ,a.colorder
    /***************************************************************************************************************
    c. 前两种不完整~
    ****************************************************************************************************************/
    --获取数据库中所有数据表
    EXEC sp_tables 
    --  获取数据表或列结构及描述信息
    EXEC sp_columns '表名'
    
    --2008新功能,获取数据表字段及描述信息
    SELECT *
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME='表名'
    
    --  获取数据表字段的说明信息
    
    SELECT * FROM  ::fn_listextendedproperty(NULL, 'user', 'dbo', 'table', '表名', 'column', default) 
    --    取得主索引
    EXEC sp_pkeys 表名 
     
    
    
    /**************************************************************************************************************
    表及字段描述信息处理示例
    **************************************************************************************************************/
    
    --创建表
    CREATE TABLE 表 (
      a1  VARCHAR(10)
      ,a2 CHAR(2))
    --为表添加描述信息
    EXECUTE Sp_addextendedproperty N'MS_Description' , '人员信息表' , N'user' , N'dbo' , N'table' , N'' , NULL , NULL
    EXEC sys.sp_addextendedproperty 
    @name=N'MS_Description', @value=N'人员信息表' , 
    @level0type=N'SCHEMA',@level0name=N'dbo', 
    @level1type=N'TABLE',@level1name=N''
     
    
    
    --为字段a1添加描述信息
    EXECUTE Sp_addextendedproperty N'MS_Description' , '姓名' , N'user' , N'dbo' , N'table' , N'' , N'column' , N'a1'
    EXEC sys.sp_addextendedproperty 
    @name=N'MS_Description', @value=N'人员信息表' , 
    @level0type=N'SCHEMA',@level0name=N'dbo', 
    @level1type=N'TABLE',@level1name=N'', 
    @level2type=N'COLUMN',@level2name=N'a1'
    
     
    
    
    --为字段a2添加描述信息
    EXECUTE Sp_addextendedproperty N'MS_Description' , '性别' , N'user' , N'dbo' , N'table' , N'' , N'column' , N'a2'
    --更新表中列a1的描述属性:
    EXEC Sp_updateextendedproperty 'MS_Description' , '字段1' , 'user' , dbo , 'table' , '' , 'column' , a1
    
    --显示表的描述属性
    SELECT *
    FROM   ::fn_listextendedproperty(NULL,'user','dbo','table','表名',NULL,NULL)
    --显示表列的描述属性
    SELECT *
    FROM   ::fn_listextendedproperty(NULL,'user','dbo','table','','column',NULL)
    --删除表中列a1的描述属性:
    EXEC Sp_dropextendedproperty 'MS_Description' , 'user' , dbo , 'table' , '' , 'column' , a1
    --删除测试
    DROP TABLE--批量删除用户表
    --1.删除外键约束
    DECLARE c1 cursor for 
        select 'alter table ['+ object_name(parent_obj) + '] drop constraint ['+name+']; '
        from sysobjects 
        where xtype = 'F'
    open c1
    declare @c1 varchar(8000)
    fetch next from c1 into @c1
    while(@@fetch_status=0)
        begin 
            exec(@c1)
            fetch next from c1 into @c1
        end
    close c1
    deallocate c1 
    --2.删除表
    DECLARE c2 cursor for 
        select 'drop table ['+name +']; '
        from sysobjects 
        where xtype = 'u' 
    open c2
    declare @c2 varchar(8000)
    fetch next from c2 into @c2
    while(@@fetch_status=0)
        begin
            exec(@c2)
            fetch next from c2 into @c2
        end
    close c2
    deallocate c2
     
     
    --批量清除表内容:
    --1.禁用外键约束
    DECLARE c1 cursor for 
        select 'alter table ['+ object_name(parent_obj) + '] nocheck constraint ['+name+']; '
        from sysobjects 
        where xtype = 'F'
    open c1
    declare @c1 varchar(8000)
    fetch next from c1 into @c1
    while(@@fetch_status=0)
        begin 
            exec(@c1)
            fetch next from c1 into @c1
        end
    close c1
    deallocate c1 
    --2.清除表内容
    DECLARE c2 cursor for 
        select 'truncate table ['+name +']; '
        from sysobjects 
        where xtype = 'u' 
    open c2
    declare @c2 varchar(8000)
    fetch next from c2 into @c2
    while(@@fetch_status=0)
        begin
            exec(@c2)
            fetch next from c2 into @c2
        end
    close c2
    deallocate c2
    --3.启用外键约束
    DECLARE c1 cursor for 
        select 'alter table ['+ object_name(parent_obj) + '] check constraint ['+name+']; '
        from sysobjects 
        where xtype = 'F'
    open c1
    declare @c1 varchar(8000)
    fetch next from c1 into @c1
    while(@@fetch_status=0)
        begin 
            exec(@c1)
            fetch next from c1 into @c1
        end
    close c1
    
    
    deallocate c1
  • 相关阅读:
    记第一场省选
    POJ 2083 Fractal 分形
    CodeForces 605A Sorting Railway Cars 思维
    FZU 1896 神奇的魔法数 dp
    FZU 1893 内存管理 模拟
    FZU 1894 志愿者选拔 单调队列
    FZU 1920 Left Mouse Button 简单搜索
    FZU 2086 餐厅点餐
    poj 2299 Ultra-QuickSort 逆序对模版题
    COMP9313 week4a MapReduce
  • 原文地址:https://www.cnblogs.com/jes_shaw/p/1858057.html
Copyright © 2011-2022 走看看