2008-10-21 38 views
62

Tôi có một bảng cơ sở dữ liệu trên máy chủ phát triển hiện đã được điền đầy đủ sau khi tôi đặt nó chạy với một thường trình nhập cho tệp CSV chứa 1,4 triệu hàng.Máy chủ SQL - Chạy các tệp tập lệnh lớn

Tôi đã chạy Thuật sĩ xuất bản cơ sở dữ liệu trên bảng và bây giờ tôi có tập lệnh SQL 286MB trên máy cục bộ của mình. Vấn đề là, tôi không thể tìm ra cách để chạy nó. Nếu tôi tải nó vào SQL Server Management Studio Express tôi nhận được một cửa sổ cảnh báo nói rằng "Các hoạt động không thể được hoàn thành".

Bất kỳ ý tưởng nào về cách tôi có thể chạy tập lệnh SQL này?

+1

Tôi đã hỏi một câu hỏi tương tự về DBA và nhận được một số phản hồi khá tốt (http://dba.stackexchange.com/questions/16763/how-do-i-run-a-large-script-with-many-inserts -without-out-out-of-memory /) – spaghetticowboy

Trả lời

-5

Chạy cái gì đó lớn bên trong một giao dịch duy nhất không phải là một ý tưởng tốt. Do đó, tôi khuyên bạn nên chia nhỏ tệp thành các phần nhỏ hơn, dễ quản lý hơn.

Một tùy chọn khác là xem xét một số cách khác để nhập trực tiếp dữ liệu CSV.

+7

Câu trả lời của Gulzar Nazim là câu trả lời hay nhất. – Feryt

+9

@feryt có thể là ý kiến ​​của bạn, nhưng đó không phải là những gì mà OP quyết định, và cũng không phải lỗi của Michael mà bạn thích câu trả lời của người khác tốt hơn (ngay cả khi câu trả lời khác không giải quyết được vấn đề của OP). –

160

sử dụng công cụ sqlcmd để thực thi tập tin ..

sqlcmd -S myServer\instanceName -i C:\myScript.sql 
+1

Sử dụng phương pháp này tôi nhận được lỗi "Sqlcmd: Error: Scripting error." Điều này có liên quan đến kích thước của tệp không? – tags2k

+0

kiểm tra kết nối đầu tiên. có thể bạn phải chuyển tên người dùng và mật khẩu (tùy chọn -U-P). bạn cũng có thể thử với một tệp nhỏ hơn không. Tôi đã chạy các tập lệnh khổng lồ mà không gặp bất kỳ sự cố nào. –

+0

Nếu tôi lấy tất cả trừ 15 câu lệnh INSERT, nó hoạt động. Nếu tôi đặt 1,410,472 câu lệnh khác vào trong nó không thành công với thông báo lỗi đó. – tags2k

0

Tại sao không chỉ sử dụng DTS để nhập tệp CSV trực tiếp?

+0

Một loạt xử lý cần được thực hiện trên dữ liệu trước tiên, mà tôi không muốn chạy trên máy chủ trực tiếp. Vì vậy, tôi cần để có thể xử lý dữ liệu vào một tập lệnh SQL đơn giản để giảm thiểu công việc theo yêu cầu của hộp đó. – tags2k

7

Thêm vào câu trả lời Gulzar Nazim của: Nếu bạn vẫn nhận một thất bại, hãy thử xác định codepage của file SQL của bạn sử dụng tùy chọn -f:

sqlcmd -S myServer\instanceName -d databaseName -i C:\myScript.sql -f 65001

Tôi đã cố gắng để nhập khẩu một tập tin .dump từ SQLite (UTF-8 theo mặc định), và sqlcmd tiếp tục ném một lỗi sau khi gặp phải ký tự đặc biệt đầu tiên. -f 65001 đã sửa nó cho tôi.

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