2012-02-06 26 views
12

Tôi đang cố gắng để chạy một kịch bản sql từ một tập tin sử dụng sqlcmd, sử dụng lệnh sau:Làm thế nào để chạy một tập tin script sql sử dụng sqlcmd và đầu ra để cả vỏ và nộp

sqlcmd -S <server> -d <database> -i <input file> -o <output file> 
     -U <user> -P <password> 

tôi chạy sql của tôi tệp và đầu ra cho tệp nhật ký.

Sự cố này thay đổi đầu ra của sqlcmd thành tệp .. và tôi cũng muốn xuất kết quả.

+0

bạn có tìm thấy câu trả lời cho điều này không? xin vui lòng nếu bạn có nó, trả lời ở đây, và trả lời câu hỏi của tôi: http://stackoverflow.com/questions/9319025/sqlcmd-with-output-file-and-screen-output để bỏ phiếu bầu lên câu trả lời của bạn nếu nó hoạt động. Cảm ơn! :) –

+0

@Leandro xin lỗi đã không tìm thấy câu trả lời ... –

Trả lời

7

@Noam,

Có một chương trình tiêu chuẩn trong UNIX thế giới mà đọc từ stdin và ghi vào stdout vào một tập tin được chỉ định: lệnh tee. Ví dụ sau đây liệt kê các thư mục hiện hành để stdout và "myfile":

$ ls | tee "myfile" 

Có một số cổng nguồn mở cho các cửa sổ, giống như wintee, và nó thậm chí tầm thường để làm cho thực hiện của riêng bạn (xem here) , nhưng PowerShell thực sự có tiện ích này đã built-in: các Tee-Object .Công Ví dụ sau đây là tương tự trước đó, trong PowerShell:

PS [c:\tmp] 
> dir | tee myDirContents.txt 

Do đó, lệnh sau sẽ thực hiện myscript.sql vào myserver, sử dụng cửa sổ thông tin hiện tại và kết quả của nó sẽ được xuất ra hoặc ra cửa sổ Console để "result.txt":

PS [c:\tmp] 
> sqlcmd -i mysrcipt.sql -S myserver -E | tee "result.txt" 
3

@Noam, mặc dù tôi không thể tìm cách sao chép trình xử lý STDOUT, một giải pháp có thể giải quyết vấn đề là thực thi tập lệnh sql vào tệp đầu ra (ví dụ: result.txt) và sau đó sử dụng type result.txt để in STDOUT.

c:>sqlcmd -i mysrcipt.sql -o result.txt -S myserver -E 
c:>type result.txt 

Nếu bạn thực sự cần phải lặp lại trong các xử lý (có thể lệnh mất rất nhiều thời gian và bạn không muốn chờ đợi cho đến khi nó kết thúc trước khi nhận được hàng đầu tiên), bạn có thể làm cho một chương trình đơn giản để sao chép các đầu vào từ STDIN vào STDOUT và cũng vào một tệp. Sau đó, bạn có thể viết lại lệnh như:

c:>sqlcmd -i mysrcipt.sql -S myserver -E > duplicate.exe "result.txt" 
0

Mã này có thể được sử dụng cho kết nối đó yêu cầu xác thực

sqlcmd -S "server_name" -d "database_name" -i "input_file" -o "output_file" -U "user_name" -P "password" 
+0

-U & -P dành cho máy chủ hoặc cơ sở dữ liệu? – ExploringApple