patternCritical
Writing select result to a csv file
Viewed 0 times
resultfilecsvwritingselect
Problem
We need to write the SELECT query results to a csv file. How can it be done using T-SQL in SQL Server 2008 r2? I know that it can be done in SSIS, but for some reasons, we don't have this option.
I tried to use the suggested proc in the article below, but when I run the proc, SQL complains that can't run sys.sp_OACreate and sys.sp_OADestroy which are called in this proc.
Do you know how we can turn on these components or know any better way to write to a file using T-SQL?
Thanks in advance.
I tried to use the suggested proc in the article below, but when I run the proc, SQL complains that can't run sys.sp_OACreate and sys.sp_OADestroy which are called in this proc.
Do you know how we can turn on these components or know any better way to write to a file using T-SQL?
Thanks in advance.
Solution
Use BCP utility
The
This doesn't export column headers by default. You need to use a UNION ALL for headers
OR
Use SQLCMD
OR
Use Powershell
Here is a link to an article. If you end up using this, you might want to append
bcp "SELECT Col1,Col2,Col3 FROM MyDatabase.dbo.MyTable" queryout "D:\MyTable.csv" -c -t , -S SERVERNAME -TThe
-c argument specifies character output, as opposed to SQL's native binary format; this defaults to tab-separated values, but -t , changes the field terminator to commas. -T specifies Windows authentication ("trusted connection"), otherwise use -U MyUserName -P MyPassword.This doesn't export column headers by default. You need to use a UNION ALL for headers
OR
Use SQLCMD
SQLCMD -S SERVERNAME -E -Q "SELECT Col1,Col2,Col3 FROM MyDatabase.dbo.MyTable"
-s "," -o "D:\MyData.csv"OR
Use Powershell
Here is a link to an article. If you end up using this, you might want to append
-notype after Export-Csv $extractFile to get rid of the unnecessary column on the output file.Code Snippets
bcp "SELECT Col1,Col2,Col3 FROM MyDatabase.dbo.MyTable" queryout "D:\MyTable.csv" -c -t , -S SERVERNAME -TSQLCMD -S SERVERNAME -E -Q "SELECT Col1,Col2,Col3 FROM MyDatabase.dbo.MyTable"
-s "," -o "D:\MyData.csv"Context
StackExchange Database Administrators Q#23566, answer score: 60
Revisions (0)
No revisions yet.