倒出数据库用户表结构和一样本数据到EXCEL中 -- ======================================================
-- 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 #tSELECT 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 #tOPEN read_cursorFETCH 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
ENDCLOSE read_cursor
DEALLOCATE read_cursor
GOSET ANSI_NULLS ON
GO
SET NOCOUNT OFF
GO
select count(*)  from #t
DROP TABLE #t
GOselect count(*)-1  from #tcselect * into ##tx from #tc order by tablename
DROP TABLE #tc--select * from ##txdeclare @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