2010-12-13 33 views

Trả lời

3

Nếu tập tin đã sẵn sàng để tải "như- là"(không biến đổi dữ liệu hoặc các ánh xạ phức tạp yêu cầu), bạn có thể sử dụng Bulk Insert lệnh:

CREATE PROC dbo.uspImportTextFile

AS

BULK INSERT Tablename FROM 'C:\ImportFile.txt' WITH (FIELDTERMINATOR ='|', FIRSTROW = 2)

http://msdn.microsoft.com/en-us/library/ms188365.aspx

+0

Ok điều đó rất hữu ích. Hàng đầu tiên sẽ có tên trường? Có cách nào để lưu dữ liệu bằng lệnh sao chép hàng loạt không. Tôi đã cố gắng sử dụng sqlcmd và bcp bên trong một thủ tục lưu trữ mà không có nhiều thành công để viết một tập tin. Nó có vẻ quá phức tạp so với một giải pháp clr .net. Nhưng các công ty trong tự nhiên dường như tin tưởng SPROCS và BCP nhiều hơn .net CLR và các chức năng FileStream. Có lẽ vì vấn đề triển khai. Cảm ơn thông tin liên quan đến Sql Server. –

+0

tiện ích bcp dành cho dòng lệnh (không dành cho truy vấn). Tuy nhiên, bạn có thể sử dụng xp_cmdshell để chạy bcp từ T-SQL. Xem tại đây: http: //www.sqlteam.com/article/export-data-programatically-with-bcp-và-xp_cmdshell – brian

+0

Ngoài ra, hãy nhớ rằng các sprocs CLR được hỗ trợ trong 2005/2008, vì vậy bạn có tùy chọn StreamWriter đó. Nó chỉ yêu cầu bật CLR và tin tưởng vào việc lắp ráp (các thiết lập bảo mật hơi thư giãn). – brian

4

Tôi khuyên bạn nên xem xét việc sử dụng SSIS. Nó được thiết kế để làm điều này loại (đặc biệt là nếu bạn cần phải làm điều đó một cách thường xuyên).

Here is a good link đọc kỹ tệp văn bản và chèn vào DB.

+0

câu trả lời hay, sử dụng TSroc thông thường cho điều này chắc chắn không phải là cách để đi. –

0

tại sao không sử dụng chức năng thử người dùng? Bằng cách này, bạn có thể sử dụng .NET để truy cập và xử lý tệp của mình.

Check-out này post

2

Cách hiệu quả nhất để chèn nhiều bản ghi vào một bảng là sử dụng BULK INSERT (Tôi tin rằng đây là những gì BCP Utility sử dụng, và vì vậy nó nên cũng nhanh).

BULK INSERT được tối ưu hóa để chèn số lượng lớn dữ liệu và được dự định sẽ được sử dụng khi thực hiện câu lệnh đơn giản INSERT đơn giản sẽ không thực hiện.

Nếu BULK INSERT không phải là những gì bạn đang sau đó bạn có thể muốn xem xét bài viết sau để một kỹ thuật đơn giản hơn:

liên kết trong bài viết này là một thủ tục lưu trữ uftReadFileAsTable mà có vẻ như nó phải đủ linh hoạt để đạt được những gì bạn đang sau.

Nếu nó không phải là sau đó bạn ít nhất có thể sử dụng thủ tục lưu trữ như một ví dụ về làm thế nào để đọc các file trong SQL (nó sử dụng OLE/các Scripting.FileSystemObject)

+2

Có thể đáng giá thêm rằng các prole OLE (sp_OA *) bị vô hiệu hóa theo mặc định vì chúng có thể mở ra nhiều chức năng bổ sung, một số chức năng có thể không được mong muốn, và như vậy sẽ được coi là vấn đề bảo mật. –

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