Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
neeraj1401
Starting Member
36 Posts |
Posted - 2008-12-03 : 00:30:47
|
Hi, I'm tring to export all table to xls file with header , I'm using the following code its working fine for tables who have less columns but i'm geeting some error for large table (having more then 100 columns).please sugesst ............. @columnConvert is taking only 4000 character .........i already defined its length to 8000 use mastergoif object_id('spExportData_n') is not null drop proc spExportData_ngocreate proc spExportData_n ( @dbName varchar(100) = 'master', @sql varchar(8000) = '', @fullFileName varchar(100) = '')asif @sql = '' or @fullFileName = ''begin select 0 as ReturnValue -- failure returnend -- if DB isn't passed in set it to masterselect @dbName = 'use ' + @dbName + ';'if object_id('##TempExportData') is not null drop table ##TempExportDataif object_id('##TempExportData2') is not null drop table ##TempExportData2-- insert data into a global temp tabledeclare @columnNames varchar(8000), @columnConvert varchar(8000), @tempSQL varchar(8000)select @tempSQL = left(@sql, charindex('from', @sql)-1) + ' into ##TempExportData ' + substring(@sql, charindex('from', @sql)-1, len(@sql))exec(@dbName + @tempSQL)if @@error > 0begin select 0 as ReturnValue -- failure returnend -- build 2 lists-- 1. column names-- 2. columns converted to nvarcharSELECT @columnNames = COALESCE( @columnNames + ',', '') + column_name, @columnConvert = COALESCE( @columnConvert + ',', '') + 'convert(nvarchar(4000),' + column_name + case when data_type in ('datetime', 'smalldatetime') then ',121' when data_type in ('numeric', 'decimal') then ',128' when data_type in ('float', 'real', 'money', 'smallmoney') then ',2' when data_type in ('datetime', 'smalldatetime') then ',120' else '' end + ') as ' + column_nameFROM tempdb.INFORMATION_SCHEMA.ColumnsWHERE table_name = '##TempExportData'-- execute select query to insert data and column names into new temp tableSELECT @sql = 'select ' + @columnNames + ' into ##TempExportData2 from (select ' + @columnConvert + ', ''2'' as [temp##SortID] from ##TempExportData union all select ''' + replace(@columnNames, ',', ''', ''') + ''', ''1'') t order by [temp##SortID]'exec (@sql)-- build full BCP queryselect @sql = 'bcp "' + @dbName + ' select * from ##TempExportData2" queryout "' + @fullFileName + '" -c -t, -T -Sserve -Usa -P'-- execute BCPExec master..xp_cmdshell @sql --print @sqlif @@error > 0begin select 0 as ReturnValue -- failure returnenddrop table ##TempExportDatadrop table ##TempExportData2set @columnNames =' ' set @columnConvert =' 'set @tempSQL =' ' select 1 as ReturnValue -- success |
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-12-03 : 00:49:48
|
duplicatehttp://www.sqlteam.com/forums/topic.asp?TOPIC_ID=115562 |
|
|
|
|
|
|
|