Export to Excel from SQL Server using T-SQL script

Export to Excel from SQL Server using T-SQL script

This post helps in understanding Export to Excel from SQL Server using T-SQL Script. Typically to export data from sql server to excel we can user varius options :

  • Import / Export Wizard
  • BCP
  • OPENROWSET

Below stored procedure will make the task easier. It provides more flexibility to Export to Excel from SQL Server using T-SQL script. .

 

USE MASTER

/*** Make sure that the below are enabled on your server ***/

-- Ad Hoc Remote Quires
-- XP_CMDSHELL

***/

/****** Object:StoredProcedure [dbo].[usp_ExportData_Excel]

Script Date: 10/05/2009 08:39:47 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

 

/*** Execution Example

EXEC [usp_ExportData_Excel] @dbName = 'Master',

@sql = 'select * from master.sys.sysdatabases',

@fullFileName = 'D:\Table_Details.xls' ,

@InstanceName ='',

@User = '',

@pwd = ''

***/

 

CREATE PROC [dbo].[usp_ExportData_Excel]

(

@dbName VARCHAR(100)='master',

@sql VARCHAR(8000)='select * from master.sys.sysdatabases',

@fullFileName VARCHAR(100) = 'D:\Table_Details.xls',

@InstanceName VARCHAR(100) = '',

@User VARCHAR(20) = '',

@Pwd VARCHAR(20) = ''

)

AS

BEGIN

SET NOCOUNT ON

IF @sql =''or @fullFileName =''

BEGIN

SELECT 0 AS ReturnValue -- failure

RETURN

END

-- if DB isn't passed in set it to master

SELECT @dbName ='use '+ @dbName +';'

IF object_id('##TempExportData') is not null

DROP TABLE ##TempExportData

IF object_id('##TempExportData2') is not null

DROP TABLE ##TempExportData2

-- insert data into a global temp table

DECLARE @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 > 0

BEGIN

SELECT 0 AS ReturnValue -- failure

RETURN

END

 

-- build 2 lists

-- 1. column names

-- 2. columns converted to nvarchar

SELECT @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_name

FROM tempdb.INFORMATION_SCHEMA.Columns

WHERE table_name ='##TempExportData'

 

-- execute select query to insert data and column names into new temp table

SELECT @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 QUERY

DECLARE @bcpCommand VARCHAR(8000)

SET @bcpCommand ='bcp " SELECT * from ##TempExportData2" queryout'

 

SET @bcpCommand = @bcpCommand +' '+@fullFileName+' -S'+

@InstanceName+' -c -w -T -U '+@User+' -P '+@pwd+'","-CRAW'

 

EXEC master..xp_cmdshell @bcpCommand

IF @@ERROR > 0

BEGIN

SELECT 0 AS ReturnValue -- failure

RETURN

END

DROP TABLE ##TempExportData

DROP TABLE ##TempExportData2

SET @columnNames =' '

SET @columnConvert =' '

SET @tempSQL =' '

SELECT 1 as ReturnValue

END

 

Posted in SQL Development, SQL Scripts | Tagged , , , , | Leave a comment
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments