-- ====================================================== --列出SQL SERVER 所有表,字段名,主键,类型,长度,小数位数等信息 --在查询分析器里运行即可,可以生成一个表,导出到EXCEL中 -- ====================================================== SELECT (casewhen a.colorder=1then d.name else''end)表名, a.colorder 字段序号, a.name 字段名, (casewhenCOLUMNPROPERTY( a.id,a.name,'IsIdentity')=1then'√'else''end) 标识, (casewhen (SELECTcount(*) FROM sysobjects WHERE (name in (SELECT name FROM sysindexes WHERE (id = a.id) AND (indid in (SELECT indid FROM sysindexkeys WHERE (id = a.id) AND (colid in (SELECT colid FROM syscolumns WHERE (id = a.id) AND (name = a.name))))))) AND (xtype ='PK'))>0then'√'else''end) 主键, b.name 类型, a.length 占用字节数, COLUMNPROPERTY(a.id,a.name,'PRECISION') as 长度, isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小数位数, (casewhen a.isnullable=1then'√'else''end) 允许空, isnull(e.text,'') 默认值, isnull(g.[value],'') AS 字段说明 FROM syscolumns a leftjoin systypes b on a.xtype=b.xusertype innerjoin sysobjects d on a.id=d.id and d.xtype='U'and d.name<>'dtproperties' leftjoin syscomments e on a.cdefault=e.id leftjoin sysproperties g on a.id=g.id AND a.colid = g.smallid orderby a.id,a.colorder ------------------------------------------------------------------------------------------------- 列出SQL SERVER 所有表、字段定义,类型,长度,一个值等信息 并导出到Excel 中 -- ====================================================== -- Export all user tables definition and one sample value -- jan-13-2003,Dr.Zhang -- ====================================================== 在查询分析器里运行: SET ANSI_NULLS OFF GO SET NOCOUNT ON GO SET LANGUAGE 'Simplified Chinese' go DECLARE@tblnvarchar(200),@fldnvarchar(200),@sqlnvarchar(4000),@maxlenint,@samplenvarchar(40) 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 FORSELECT TableName,FieldName FROM #t SELECTTOP1'_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 FETCHNEXTFROM 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(cast('+@fld+' as nvarchar))) FROM '+@tbl+')' --PRINT @sql EXEC SP_EXECUTESQL @sql,N'@maxlen int OUTPUT',@maxlen OUTPUT --print @maxlen SET@sql=N'SET @sample=(SELECT TOP 1 cast('+@fld+' as nvarchar) FROM '+@tbl+' WHERE len(cast('+@fld+' as nvarchar))='+convert(nvarchar(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 print@tbl EXEC SP_EXECUTESQL @sql,N'@sample nvarchar(30) OUTPUT',@sample OUTPUT INSERTINTO #tc SELECT*,ltrim(ISNULL(@maxlen,0)) as MaxLenUsed, convert(nchar(20),ltrim(ISNULL(@sample,''))) as Sample,'' Comment FROM #t where TableName=@tbland FieldName=@fld END FETCHNEXTFROM read_cursor INTO@tbl,@fld END CLOSE read_cursor DEALLOCATE read_cursor GO SET ANSI_NULLS ON GO SET NOCOUNT OFF GO selectcount(*) from #t DROPTABLE #t GO selectcount(*)-1from #tc select*into ##tx from #tc orderby tablename DROPTABLE #tc --select * from ##tx declare@dbnvarchar(60),@sqlnvarchar(3000) set@db=db_name() --请修改用户名和口令 导出到Excel 中 set@sql='exec master.dbo.xp_cmdshell ''bcp ..dbo.##tx out c:'+@db+'_exp.xls -w -C936 -Usa -Psa ''' print@sql exec(@sql) GO DROPTABLE ##tx GO -- ====================================================== --根据表中数据生成insert语句的存储过程 --建立存储过程,执行 spGenInsertSQL 表名 --感谢playyuer -- ====================================================== CREATEproc spGenInsertSQL (@tablenamevarchar(256)) as begin declare@sqlvarchar(8000) declare@sqlValuesvarchar(8000) set@sql=' (' set@sqlValues='values (''+' select@sqlValues=@sqlValues+ cols +' + '','' + ' ,@sql=@sql+'['+ name +'],' from (selectcase when xtype in (48,52,56,59,60,62,104,106,108,122,127) then'case when '+ name +' is null then ''NULL'' else '+'cast('+ name +' as varchar)'+' end' when xtype in (58,61) then'case when '+ name +' is null then ''NULL'' else '+''''''''' + '+'cast('+ name +' as varchar)'+'+'''''''''+' end' when xtype in (167) then'case when '+ name +' is null then ''NULL'' else '+''''''''' + '+'replace('+ name+','''''''','''''''''''')'+'+'''''''''+' end' when xtype in (231) then'case when '+ name +' is null then ''NULL'' else '+'''N'''''' + '+'replace('+ name+','''''''','''''''''''')'+'+'''''''''+' end' when xtype in (175) then'case when '+ name +' is null then ''NULL'' else '+''''''''' + '+'cast(replace('+ name+','''''''','''''''''''') as Char('+cast(length asvarchar) +'))+'''''''''+' end' when xtype in (239) then'case when '+ name +' is null then ''NULL'' else '+'''N'''''' + '+'cast(replace('+ name+','''''''','''''''''''') as Char('+cast(length asvarchar) +'))+'''''''''+' end' else'''NULL''' endas Cols,name from syscolumns where id =object_id(@tablename) ) T set@sql='select ''INSERT INTO ['+@tablename+']'+left(@sql,len(@sql)-1)+') '+left(@sqlValues,len(@sqlValues)-4) +')'' from '+@tablename --print @sql exec (@sql) end GO -- ====================================================== --根据表中数据生成insert语句的存储过程 --建立存储过程,执行 proc_insert 表名 --感谢Sky_blue -- ====================================================== CREATEproc proc_insert (@tablenamevarchar(256)) as begin set nocount on declare@sqlstrvarchar(4000) declare@sqlstr1varchar(4000) declare@sqlstr2varchar(4000) select@sqlstr='select ''insert '+@tablename select@sqlstr1='' select@sqlstr2=' (' select@sqlstr1=' values ( ''+' select@sqlstr1=@sqlstr1+col+'+'',''+' ,@sqlstr2=@sqlstr2+name +','from (selectcase -- when a.xtype =173 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end' when a.xtype =104then'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(1),'+a.name +')'+' end' when a.xtype =175then'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')'+'+'''''''''+' end' when a.xtype =61then'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+'+'''''''''+' end' when a.xtype =106then'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end' when a.xtype =62then'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end' when a.xtype =56then'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(11),'+a.name +')'+' end' when a.xtype =60then'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end' when a.xtype =239then'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')'+'+'''''''''+' end' when a.xtype =108then'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end' when a.xtype =231then'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')'+'+'''''''''+' end' when a.xtype =59then'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end' when a.xtype =58then'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+'+'''''''''+' end' when a.xtype =52then'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(12),'+a.name +')'+' end' when a.xtype =122then'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end' when a.xtype =48then'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(6),'+a.name +')'+' end' -- when a.xtype =165 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end' when a.xtype =167then'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')'+'+'''''''''+' end' else'''NULL''' endas col,a.colid,a.name from syscolumns a where a.id =object_id(@tablename) and a.xtype <>189and a.xtype <>34and a.xtype <>35and a.xtype <>36 )t orderby colid select@sqlstr=@sqlstr+left(@sqlstr2,len(@sqlstr2)-1)+') '+left(@sqlstr1,len(@sqlstr1)-3)+')'' from '+@tablename -- print @sqlstr exec( @sqlstr) set nocount off end GO 说明:本贴纯属收藏,目的在于大家交流,在此对作者表示感谢!