2012-12-20 29 views
5

Tôi đang làm việc trên một câu lệnh SQL đơn giản để tạo các tệp BCP được tải vào cơ sở dữ liệu.SQL Nhận các kết quả phân tách cho tất cả các cột

Những tập tin BCP có định dạng sau:

1|name|otherfield|otherfield1 

Để xây dựng các file như thế này Tôi hiện đang làm:

SELECT id+"|"+name+"|"+otherfield+"|"+otherfield1+"\n" FROM table 

Có một tuyên bố chọn mà sẽ chọn every column mà không cần phải Hãy gọi tên của chúng?

Something như

SELECT * with "|" from Table 
+1

Đó thực sự là cách chính xác để làm điều đó ngay từ đầu? Điều gì sẽ xảy ra nếu một trong các cột của bạn chứa "|"? Không có quy tắc thoát mà bạn nên áp dụng? – deceze

+0

@ lừa dối đây là một điểm rất tốt, tiếc là kịch bản mà đọc những trong là "ngoài tầm kiểm soát của tôi" và hy vọng | và không hỗ trợ bất kỳ ký tự thoát nào. Đó là cũ tốt "nó hoạt động như vậy không chạm vào nó". –

+0

Trước khi có thẻ mysql nhưng thẻ đã bị xóa. Bất kỳ ý tưởng tại sao? –

Trả lời

1

Nếu bạn muốn đầu ra trong một tập tin sau đó bạn có thể thử

SELECT * 
INTO OUTFILE 'D://abc.txt' 
FIELDS TERMINATED BY '|' LINES TERMINATED BY '\r\n' 
FROM table 

đây tôi đã sử dụng \r\n cho outputting mỗi hàng trên một dòng mới (trên Windows)

này
+0

Điều này cho cơ sở dữ liệu Sybase, không phải MySql –

1

Đối với Sybase ASE, tại sao không chỉ thay đổi dấu phân cách bằng cách sử dụng tiện ích được xây dựng trong tiện ích bcp. Nó sẽ chụp tất cả các cột theo mặc định.

bcp MYDATABASE..MYTABLE out MYTABLEFILE.bcp -Uusername -Ppassword -SMYSERVER -c -t| 

Bạn phải sử dụng tùy chọn -t để thiết lập delimeter cột, mà chỉ có thể được sử dụng với -c tùy chọn chỉ định một 'nhân vật' (có thể đọc được con người) dựa BCP đầu ra. Nếu bạn đang sử dụng hệ thống dựa trên Unix/Linux, bạn có thể phải thoát khỏi đường ống, ví dụ: - \ t

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