zoukankan      html  css  js  c++  java
  • 导出数据库中的所有表的结构

    使用下面的存储过程: 
    如果输入表名则取出此表,如果不输入表名则选出全表结构,有问题请继续问我。 
    --此存储过程可以取出所输入表的字段信息,如果表名为空则列出当前数据库中的所有表的信息, 
    --如果@WITHVIEW参数不为0则列出视图的字段信息,为0则不列视图信息 
    
    
    CREATE PROCEDURE [dbo].[TABLE_INFO](@TABLENAME VARCHAR(50),@WITHVIEW BIT=0 ) 
    AS 
    BEGIN 
      if NOT exists (select * from dbo.sysobjects 
    where id = object_id(N'[dbo].[DATADICT]') and OBJECTPROPERTY(id, N'IsUserTable')=1)
    BEGIN 
      IF @TABLENAME IS NULL 
      BEGIN 
        IF @WITHVIEW=0 
        BEGIN 
          SELECT CASE O.TYPE WHEN 'V ' THEN '视图: ' + O.NAME ELSE '表: ' + O.NAME END AS 表名,
                 C.name AS 列名, T.name AS 类型, C.length AS 长度, C.prec AS 精度, 
                C.scale AS 小数位数, 
                CASE C.ISNULLABLE WHEN 0 THEN 'YES ' ELSE 'NO ' END AS 可否为空
          FROM sys.syscolumns AS C INNER JOIN
                sys.systypes AS T ON C.xusertype = T.xusertype INNER JOIN
                sys.sysobjects AS O ON C.id = O.id
          WHERE (O.type = 'U ') AND (O.name NOT IN ('SYSCONSTRAINTS ', 'SYSSEGMENTS '))
          ORDER BY O.type, O.name, 列名 
        END 
          ELSE 
        BEGIN 
          SELECT 表名= CASE O.TYPE WHEN 'V ' THEN '视图: '+ O.NAME ELSE '表: '+ O.NAME END 
          ,C.NAME AS 列名,T.NAME AS 类型,C.LENGTH AS 长度,C.PREC   精度,C.SCALE AS   小数位数 , 
          可否为空= 
            CASE C.ISNULLABLE 
            WHEN 0 
            THEN 'YES ' 
            ELSE 'NO ' 
            END 
          FROM SYSCOLUMNS C,SYSOBJECTS O ,SYSTYPES T 
          WHERE T.xUSERTYPE=C.xUSERTYPE AND 
            O.ID=C.ID AND (O.TYPE= 'U ' OR O.TYPE= 'V ') 
            AND O.NAME NOT IN ( 'SYSCONSTRAINTS ', 'SYSSEGMENTS ') 
          ORDER BY O.TYPE,O.NAME,C.NAME 
        END 
      END 
      ELSE 
      BEGIN 
       SELECT C.name AS 列名, T.name AS 类型, C.length AS 长度, C.prec AS 精度, 
             C.scale AS 小数位数, 
             CASE C.ISNULLABLE WHEN 0 THEN 'YES ' ELSE 'NO ' END AS 可否为空
       FROM sys.syscolumns AS C INNER JOIN
             sys.systypes AS T ON C.xusertype = T.xusertype INNER JOIN
             sys.sysobjects AS O ON C.id = O.id
       WHERE (O.name = @TABLENAME)
       ORDER BY O.type, O.name, 列名
    END
    END
    ELSE
    BEGIN 
      IF NOT @TABLENAME IS NULL 
      BEGIN 
        SELECT @TABLENAME AS 表名, A.NAME AS 列名,C.EXPLAIN AS 说明, B.NAME AS 数据类型, 
        A.LENGTH AS 长度,A.XPREC AS 精度,A.XSCALE AS 小数位数 
        FROM SYSCOLUMNS A join SYSTYPES AS B on B.XTYPE=A.XTYPE right join DATADICT AS C on C.FIELDS=A.NAME 
        WHERE ID = OBJECT_ID(@TABLENAME)   
        AND C.TABLENAME=@TABLENAME 
        ORDER BY A.NAME 
      END 
      ELSE 
      BEGIN 
        SELECT 表名= CASE O.TYPE WHEN 'V ' THEN '视图: '+ O.NAME ELSE '表: '+ O.NAME END 
        , A.NAME AS 列名,C.EXPLAIN AS 说明, B.NAME AS 数据类型, 
        A.LENGTH AS 长度,A.XPREC AS 精度,A.XSCALE AS 小数位数 
        FROM SYSCOLUMNS A join SYSTYPES AS B on B.XUSERTYPE=A.XUSERTYPE right join DATADICT AS C on C.FIELDS=A.NAME right join SYSOBJECTS AS O on C.TABLENAME=O.NAME  
        WHERE A.ID = O.ID 
        AND (O.TYPE= 'U ' OR O.TYPE= 'V ') 
        AND O.NAME NOT IN ( 'SYSCONSTRAINTS ', 'SYSSEGMENTS ') 
        ORDER BY O.TYPE, O.NAME,A.NAME 
      END 
    
      END 
      
    END 
  • 相关阅读:
    springCloud学习6(Spring Cloud Sleuth 分布式跟踪)
    springCloud学习5(Spring-Cloud-Stream事件驱动)
    springCloud学习4(Zuul服务路由)
    springCloud学习3(Netflix Hystrix弹性客户端)
    springCloud学习笔记2(服务发现)
    EFCore
    webBrowser.DocumentText重新赋值无效解决方法
    C# SQLite写入和读取DateTime类型
    自定义协议链接 ------2.实践篇
    自定义协议链接 ------1.原理篇
  • 原文地址:https://www.cnblogs.com/goto/p/2619934.html
Copyright © 2011-2022 走看看