Often when working in SQL Server Management Studio, you will end up with a complicated query that results in a huge number of records that need to be exported for processing by another tool. When working with more than a few megabytes of data, simply copying and pasting it into Excel isn't an option.
One potential solution is use the bcp
utility to export the results into a tab-delimited CSV file using a temporary table. In order for the temporary table to be visible to bcp
, we need to use a global temp table. This is achieved by using an INTO
clause and prepending two hashes to the temp table name.
SELECT table1.col1, table2.col2, table3.col3 INTO ##tempbcp FROM table1 INNER JOIN table2 ON table1.key1 = table2.key1 LEFT JOIN table3 ON table1.key2 = table3.key2;
After the temporary table is populated, invoke bcp
from a command prompt to extract the data.
bcp ##tempbcp out tempbcp.csv -S sqlhost -T -w
The -T
option uses your network credentials to log on to the SQL Server. -w
specifies that we want our results in a tab-delimited, unicode format.
Using bcp
in this way to move data around is usually the best solution because, most of the time, the ability to create tables in tempdb
is unrestricted, so no special database permissions are needed. Also, bcp
is much faster and more memory efficient than most other methods.
However, a major drawback is that bcp
is unable to include header titles in the output file. In order to get the field names, you can query the system views. From there you can use a variety of methods to get the field names into the CSV file or wherever the data is ultimately being transferred.
SELECT name FROM tempdb.sys.columns WHERE [object_id] = OBJECT_ID('tempdb..##tempbcp') ORDER BY column_id;
No comments:
Post a Comment