分享

倒出数据库用户表结构和一样本数据到EXCEL中,供参考! MS-SQL Server / ...

 昵称728549 2010-01-25

--   ======================================================  
  --   Export   all   user   tables   definition   and   one   sample   value  
  --   jan-13-2003,Dr.Zhang  
  --   ======================================================  
  SET   ANSI_NULLS   OFF    
  GO  
  SET   NOCOUNT   ON  
  GO  
   
   
  DECLARE   @tbl   varchar(100),@fld   varchar(100),@sql   nvarchar(4000),@maxlen   int,@sample   varchar(20)  
   
  SELECT   d.name   TableName,a.name   FieldName,b.name   TypeName,a.length   Length,a.isnullable   IS_NULL   INTO   #t  
  FROM     syscolumns     a,     systypes   b,sysobjects   d      
  WHERE     a.xtype=b.xusertype     and     a.id=d.id     and     d.xtype='U'  
   
  DECLARE   read_cursor   CURSOR  
  FOR   SELECT   TableName,FieldName   FROM   #t  
   
  SELECT   TOP   1   '_TableName                                           '   TableName,  
            'FieldName                                             '   FieldName,'TypeName                           '   TypeName,  
            'Length'   Length,'IS_NULL'   IS_NULL,    
            'MaxLenUsed'   AS   MaxLenUsed,'Sample   Value                     '   Sample,  
                            'Comment       '   Comment   INTO   #tc   FROM   #t  
   
  OPEN   read_cursor  
   
  FETCH   NEXT   FROM   read_cursor   INTO   @tbl,@fld  
  WHILE   (@@fetch_status   <>   -1)     ---   failes  
  BEGIN  
  IF   (@@fetch_status   <>   -2)   --   Missing  
  BEGIN  
  SET   @sql=N'SET   @maxlen=(SELECT   max(len('+@fld+'))   FROM   '+@tbl+')'  
  --PRINT   @sql  
  EXEC   SP_EXECUTESQL   @sql,N'@maxlen   int   OUTPUT',@maxlen   OUTPUT  
  --print   @maxlen  
  SET   @sql=N'SET   @sample=(SELECT   TOP   1   '+@fld+'   FROM   '+@tbl+'   WHERE   len('+@fld+')='+convert(varchar(5),@maxlen)+')'  
  EXEC   SP_EXECUTESQL   @sql,N'@sample   varchar(30)   OUTPUT',@sample   OUTPUT  
  --for   quickly  
  --SET   @sql=N'SET   @sample=convert(varchar(20),(SELECT   TOP   1   '+@fld+'   FROM   '+  
  --@tbl+'   order   by   1   desc   ))'      
  --PRINT   @sql  
  print   @sample  
  EXEC   SP_EXECUTESQL   @sql,N'@sample   varchar(30)   OUTPUT',@sample   OUTPUT  
  INSERT   INTO   #tc   SELECT   *,ltrim(ISNULL(@maxlen,0))   as   MaxLenUsed,  
  convert(char(20),ltrim(ISNULL(@sample,'   ')))   as   Sample,'   '   Comment   FROM   #t   where   TableName=@tbl   and   FieldName=@fld  
  END  
  FETCH   NEXT   FROM   read_cursor   INTO   @tbl,@fld  
  END  
   
  CLOSE   read_cursor  
  DEALLOCATE   read_cursor  
  GO  
   
  SET   ANSI_NULLS   ON  
  GO  
  SET   NOCOUNT   OFF  
  GO  
  select   count(*)     from   #t  
  DROP   TABLE   #t  
  GO  
   
  select   count(*)-1     from   #tc  
   
  select   *   into   ##tx   from   #tc   order   by   tablename  
  DROP   TABLE   #tc  
   
  --select   *   from   ##tx  
   
  declare   @db   varchar(30),@sql   varchar(3000)  
  set   @db=db_name()  
  set   @sql='exec   master.dbo.xp_cmdshell   ''bcp   ..dbo.##tx   out   c:\'+@db+'_exp.xls   -c   -Usa   -P   '''  
  print   @sql  
  exec(@sql)  
  GO  
  DROP   TABLE   ##tx  
  GO   

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多