Search code examples
sqlcsvmetadatabcp

BCP Export from SQL to CSV File, Metadata, Header Row


I need to export data from an SQL table to CSV format. But I also need: 1. Metadata inserted in the first row of the output. This will be static. 2. Header row after the metadata. 3. Data. BUT I need fields with multiple values (e.g. name JOHN SMITH) to be in "" and commas within the quotes to separate the values within the field.

Here is my first draft to get data in CSV:

EXEC xp_cmdshell 'bcp "SELECT ITN_USER, SITE_ID, TICKET_NUMBER, VALIDATING_CARRIER_CODE, TICKET_EXPIRATION_DATE, TICKET_CURR_CODE, RESIDUAL_TOTAL_AMT, TICKET_TOTAL_FARE, PASSENGER_NAME, FIRST_ORIG_APT_CODE, FIRST_DEST_APT_CODE, FIRST_DEPART_DATE, TICKET_ISSUE_DATE, CRS_LOCATOR, TICKET_STATUS_ID, TICKET_TYPE, RSVN_SYS_ID, TICKETING_LOCATION, TICKET_BASE_FARE, TICKET_TAX, FARE_CALC_LINE FROM GDSX.dbo.UnusedTickets WHERE INSERT_DATE = ''01-31-2018''" queryout "C:\Users\Public\Documents\filename1_filename2_date.csv" /c /t, -T'

Any helpful tips or suggestions would be greatly appreciated.

This is what I want to achieve: “josh@gmail.com,vbear@gmail.com" ITN_USER,SITE_ID,TICKET_NUMBER,VALIDATING_CARRIER_CODE,TICKET_ EXPIRATION_DATE,TICKET_CURR_CODE,RESIDUAL_TOTAL_AMT,TICKET_TOT AL_FARE,PASSENGER_NAME,FIRST_ORIG_APT_CODE,FIRST_DEST_APT_CODE ,FIRST_DEPART_DATE,TICKET_ISSUE_DATE,CRS_LOCATOR,TICKET_STATUS _ID,TICKET_TYPE,RSVN_SYS_ID,TICKETING_LOCATION,TICKET_BASE_FAR E,TICKET_TAX,FARE_CALC_LINE vbear,abccorpus,0017845439769,AA,08MAY2009,USD,1226.57,1629.00 ,bear/vernon,MSY,ORD,17MAY2008,08MAY2008,,,electronic,,,,, jsmith,abccorpus,0167846739059,UA,19JUN2009,USD,354.00,354.00, smith/john,LAX,PDX,25JUN2008,19JUN2008,,,,,,,, dgarcia,abccorpmx,1327959759566,MX,03AUG2009,MXN,6828.06,6828. 06,garcia/diego,MEX,GUA,07AUG2008,03AUG2008,,,electronic,,,,,

Thanks!


Solution

  • Try Creating a view and use the view in your BCP statement. You can do all your calculation in the view. For metadata you need to do a union all with the data. SO your view will be something like...

    Create view abc as 
       select 'Name' as Name, 'Age' as Age --Metadata 
          Union All
       Select Name , Cast(Age as Varchar(X)) from your table
    

    make sure you give cast varchar for all the column as you will be doing union.