วันอังคารที่ 9 มีนาคม พ.ศ. 2553

Export text file from sql server using BCP and SQL Script

- How to use bcp in sql server ?
- Export text file,csv file from sql server via sql script 
- Export ข้อมูลจาก SQL Server เป็น Text file,csv file ด้วย SQL Script

การ Export ไฟล์จากฐานข้อมูล Sql server เป็น Text file / CSV file
BCP เป็น Utility ตัวหนึ่งของ SQL Server ที่ใช้สำหรับ Bulk insert/ Export ไฟล์ในรูปแบบต่าง ๆ

How to use BCP in SQL Server, (วิธีการใช้งาน BCP ใน SQL Server )
1 Enabling  sys.xp_cmdshell   (เปิดใช้งาน xp_cmdshell)

sp_configure 'show advanced options',1
GO
RECONFIGURE
GO
sp_configure xp_cmdshell,1
GO
RECONFIGURE

If xp_cmdshell is disable this error will occure "SQL Server blocked access to procedure 'sys.xp_cmdshell"

2 Check  xp_cmdshell value
Exec sp_configure
GO
go to last line and check config_value of xp_cmdshell , value need to be "1"

(ไปที่บรรทัดสุดท้ายเพื่อตรวจสอบค่า หากเป็น "0" ต้อง set เป็น "1" ในขั้นตอนที่ 2)

 3 Create test sript to export data to text file (ตัวอย่าง BCP Script สำหรับ Export text file)
This example will show How to export data from table delimited by comman (",")
ในตัวอย่างจะแสดงวิธีการ Export ข้อมูลออกเป็น text file โดยคั่น Columns ด้วย  comma
USE AdventureWorks

Declare @Headers varchar(1000),@sql varchar(8000), @data_file varchar(100),
@x varchar(300),@file_name varchar(100)
BEGIN
SET @file_name = 'C:\test_bcp.txt'
---------------- HEADER ROWS GENERATE ----------------
Select @Headers = IsNull(@Headers + ',', '') + Column_Name
From INFORMATION_SCHEMA.COLUMNS
Where Table_Name = 'CreditCard' ORDER BY ORDINAL_POSITION ASC

print @Headers

set @sql = 'bcp "select ''' + @Headers + '''" queryout "'+@file_name+'" -U "sa" -P "1234" -c -C 65001 -t "," -r \n'


print @sql
exec master..xp_cmdshell @sql
set @sql = 'exec master..xp_cmdshell ' + @sql
print @sql

-----------------DATA SECTION ------------------------
select @data_file=substring(@file_name,1,len(@file_name)-charindex('\',reverse(@file_name)))+'\data_file.csv'
print @data_file


set @sql = 'bcp "select * from [AdventureWorks].sales.CreditCard '+' " queryout "'+@data_file+'" -U "sa" -P "1234" -c -C 65001 -t "," -r \n'


print @sql
exec master..xp_cmdshell @sql
--Copy dummy file to passed CSV file


set @sql= 'exec master..xp_cmdshell ''type '+@data_file+' >> "'+@file_name+'"'''
print @sql
exec(@sql)
--Delete dummy file
set @sql= 'exec master..xp_cmdshell ''del '+@data_file+''''
print @sql
exec(@sql)
---------------- END DATA SECTION -------------------
END


- Dont forget to change sa password in script.
- Exported file will store in server side! Not client.

1 ความคิดเห็น:

  1. ไม่ระบุชื่อ24 มกราคม 2556 เวลา 16:35

    ทำไมบางครั้ง txt ที่ได้มันเป็นภาษาญี่ปุ่นครับ ? จะแก้ไขหรือกำหนดอย่างไรให้ font ไม่เพี้ยน

    ตอบลบ