2014-04-22 18 views
5

Tôi cần BCP một bảng thành tệp được phân tách bằng tab, nhưng tôi cần tên cột trong bản ghi đầu tiên của bảng. Câu hỏi 1: Tôi có đúng là BCP không có công tắc cho việc này không? Câu hỏi 2: Nếu không, tại sao?Lấy tên cột có truy vấn BCP

Tôi cố gắng để làm như sau:

BCP "declare @colnames varchar(max); select @colnames=coalesce (@colnames+char(9), '') 
+ Column_Name from db.information_Schema.columns where table_name='table1' order by 
ordinal_position; select @colnames" queryout Table1_Columns.tsv -S?? -U?? -P?? -f** -e** 

Các tập tin định dạng trông như thế này:

9.0 
1 
1 SQLCHAR 0 100 "\r\n" 1 Column_Names SQL_Latin1_General_CP1_CI_AS 

này được tôi một tập tin của các tên cột, sau đó một lệnh BCP thứ hai được cho tôi một tập tin dữ liệu, và tôi chỉ DOS-sao chép hai với nhau. Câu hỏi 3: Tôi có thông minh hay không? Câu hỏi 4: Tại sao nó không hoạt động? Tôi nhận được lỗi:

SQLState = S1000, NativeError = 0 
Error = [Microsoft][SQL Native Client]Host-file columns may be skipped only when 
copying into the Server 

Trả lời

8

BCP không hỗ trợ xuất khẩu các tiêu đề cột với dữ liệu, tuy nhiên có một số cách giải quyết như xuất khẩu các tiêu đề trong một file riêng biệt, sau đó sáp nhập cả tiêu đề và các tập tin dữ liệu như sau:

exec master..xp_cmdshell 'BCP "select 'SETTINGS_ID','GROUP_NAME'" queryout d:\header.csv -c -T -t,' 

exec master..xp_cmdshell 'BCP "select SETTINGS_ID,GROUP_NAME from [DB]..[TABLE]" queryout "d:\columns.csv" -c -t, -T ' 

exec master..xp_cmdshell 'copy /b "d:\header.csv"+"d:\columns.csv" "d:/result.csv"' 

bạn cũng có thể xóa các tập tin không sử dụng:

exec master..xp_cmdshell 'del "d:\header.csv"' 
exec master..xp_cmdshell 'del "d:\columns.csv"' 

Hoặc có thể bạn có thể kết hợp tất cả các dữ liệu trong một cái nhìn (thêm tiêu đề) và xuất khẩu nó

+0

dòng đầu tiên không hoạt động đối với tôi: ''SETTINGS_ID' không phải là tùy chọn được công nhận'. Bất kỳ đầu mối? –

+0

Bạn phải thay thế bằng tiêu đề cột của riêng mình. –

+0

cách bạn có thể sử dụng lệnh sao chép với vị trí làm tham số? ví dụ: 'EXEC master..xp_cmdshell 'copy/b"' + @OutputLocationHeader + '"+"' + @OutputLocationData + '""' + @OutputLocation + '"'' nó cho tôi một lỗi cho '+ đầu tiên 'dấu hiệu – Stephanie

Các vấn đề liên quan