Access
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Access

Truy cập bằng Microsoft SQL Server - Nhập tập dữ liệu lớn bằng SSIS

Truy cập bằng Microsoft SQL Server - Nhập tập dữ liệu lớn bằng SSIS

Chết vì Truy vấn Chèn Access

Nếu bạn đã từng cố gắng chèn một lượng lớn bản ghi vào SQL Server bằng cách sử dụng truy vấn chèn Access, (15.000 bản ghi trở lên), thì bạn đang chờ đợi một thời gian dài, đang nói chuyện về thời gian nghỉ giải lao ở đây, (từ vài phút đến 15). Nó thậm chí có thể khiến cơ sở dữ liệu của bạn bị treo nếu tập dữ liệu quá lớn. Vậy bạn có những lựa chọn nào?

XML là một nỗ lực đầu tiên tuyệt vời

Một trong những phương pháp chúng tôi thường sử dụng trong mã của mình là làm việc với dữ liệu XML, tôi sẽ không đi sâu quá chi tiết về điều đó ở đây, nhưng đây là một liên kết mà một đồng nghiệp của tôi đã viết. Nó bao gồm loạt bài gồm 2 phần thảo luận về cách làm việc với dữ liệu XML với phần phụ trợ SQL Server.

XML là một công cụ tuyệt vời để thử, nhưng thậm chí điều đó có thể không đủ nhanh với việc đánh số bộ dữ liệu trong 10.000 năm. Tuy nhiên, ưu điểm của XML so với công việc SSIS là công việc SSIS yêu cầu một thư mục mạng nơi tất cả người dùng Access và máy chủ có thể truy cập. Điều đó sẽ không hoạt động tốt qua internet (kịch bản mà phương pháp XML được tạo cho ban đầu).

SSIS siêu nhanh

Điều tôi muốn chia sẻ với bạn ở đây là về kinh nghiệm của tôi khi làm việc với Dịch vụ Tích hợp Máy chủ SQL. Chúng tôi có một khách hàng có cơ sở dữ liệu đã sử dụng phương pháp XML để tải dữ liệu lên máy chủ SQL nhưng vì dữ liệu họ đang nhập có hơn 700.000 hàng dữ liệu nên cần 20 phút để hoàn tất quy trình. Điều này rõ ràng là mất quá nhiều thời gian đối với một công ty bận rộn cần sử dụng phương pháp này hàng ngày. Giải pháp của chúng tôi là xóa Access khỏi quá trình tải lên bằng cách tạo một công việc có thể đọc tệp CSV trực tiếp từ vị trí tệp và nhập dữ liệu vào bảng SQL Server bằng cách sử dụng tập lệnh T-SQL đơn giản.

Chỉ truy cập bắt đầu quá trình

Người dùng sẽ chọn tệp dữ liệu của họ trong Access và nhập bất kỳ thông tin cần thiết nào khác, chẳng hạn như ngày tháng và nhấp vào nút xử lý. Bước đầu tiên của mã vba sẽ là lưu trữ tên tệp và đường dẫn đến bảng trong SQL Server.
'Thêm tên tệp nhập vào Ứng dụng
ExecuteMyCommand "CẬP NHẬT ứng dụng SSISDataImportFile =" &Chuẩn bị sẵn sàng (Me.txtFileInput)

Đây là mã vba được sử dụng để sau đó thực thi công việc SSIS.
Public Function ImportData ()
On Error GoTo ImportData_Err
Dim rs As ADODB.Recordset
> Dim strSQL dưới dạng chuỗi

‘Thêm mã để kích hoạt Gói SSIS
strSQL =“ EXEC dbo.uspSSISFileDataImport ”
OpenMyRecordset rs, strSQL, rrOpenForwardOnly, rrLockReadOnly, True

‘Đoạn sau lặp lại một thủ tục để kiểm tra xem công việc đã hoàn thành chưa.
strSQL =“ EXEC dbo.uspSSISFileDataImportProcess ”
OpenMyRecordset rs, strSQL, rrOpenForwardOnly, rrLockReadOnly, True

Do Until rs.Fields (0) =4 And Not IsNull (rs.Fields (3))
strSQL =“EXEC dbo.uspSSISFileDataImportProcess”
OpenMyRecordset rs, strSQL, rrOpenForwardOnly, rrLockReadOnly, True
Vòng lặp

ImportData_Exit:
Set rs =Nothing
Exit Function

ImportData_Err:
MsgBox Err.Description
Tiếp tục ImportData_Exit
Tiếp tục ‘để gỡ lỗi

Hàm End

THỰC HIỆN msdb.dbo.sp_start_job @Job_name =N’SSISDataImport ’;

HẾT;
TẠO THỦ TỤC [dbo]. [UspSSISFileDataImportProcess]
AS
BẮT ĐẦU
ĐẶT SỐ TÀI KHOẢN BẬT;
DECLARE
@execution_id INT,
@JobStatusID INT,
@JobStatus Varchar (250),
@StartTime DATETIME2,
@EndTime DATETIME2;

CHỜ TRÌ HOÃN '00:00:03 ′;

SELECT @ execute_id =MAX ([execute_id])
TỪ [SSISDB]. [Nội bộ]. [Thực thi];

SELECT
@JobStatusID =e.executable_id,
@JobStatus =e.executable_name,
@StartTime =s.start_time,
@EndTime =s.end_time
TỪ SSISDB .internal.executables AS e
TRÁI THAM GIA SSISDB.internal.executable_stosystem AS s
ON e.executable_id =s.executable_id AND s.execution_id =@execution_id;

SELECT @JobStatusID, @JobStatus, @StartTime, @EndTime;
END;
Thủ tục được lưu trữ này sẽ chạy một công việc đơn giản với thiết kế sau.

Nhận thông số - Đây là một tập lệnh T-SQL đơn giản, chọn tên tệp và đường dẫn từ bảng sql và gán các giá trị cho các tham số tương ứng. CHỌN SSISDataImportFile TỪ tblApplicationSettings; Tên tệp sẽ khác nhau giữa các ngày, do đó, sử dụng một tham số là cách để thực hiện, tên tệp được nhập vào một đối tượng không liên kết trên biểu mẫu truy cập sau đó với mã hóa VBA được lưu vào bảng SQL, cho phép gói đọc từ một bảng SQL (xem đoạn mã ở trên).

Cắt ngắn đầu vào của ngày hôm nay - Một tập lệnh T-SQL đơn giản để loại bỏ bất kỳ dữ liệu hiện có nào trong bảng tạm nhập, chạy qua các bản ghi để thực hiện các thay đổi hoặc cập nhật. Trước tiên, bạn có thể cần nhập dữ liệu vào bảng tạm thời trong trường hợp bạn cần xác minh dữ liệu hoặc thực hiện các thay đổi thêm đối với dữ liệu trước khi lưu trữ trong bảng vĩnh viễn.

Nhiệm vụ về luồng dữ liệu - Giải thích ở phần sau.

Nguồn tệp phẳng - Sử dụng các tham số từ bước đầu tiên, công việc có thể truy cập tệp văn bản.
Tệp cần được lưu trữ trong ổ đĩa mạng hoặc thư mục mà máy chủ có thể truy cập được.

Đích đến của OLE DB - Bước cuối cùng của công việc này là quá trình nhập dữ liệu vào bảng SQL Server. Tại đây bạn xác định kết nối cơ sở dữ liệu và tên bảng. Đây cũng là nơi bạn sẽ ánh xạ các trường từ tệp văn bản đến các trường đích trong bảng.

Cuối cùng, tôi đã tạo thủ tục được lưu trữ để trả về executeID. Mục đích ở đây là thủ tục được lưu trữ sẽ không thoát cho đến khi công việc hoàn thành, ngăn không cho mã Microsoft Access VBA tiếp tục cho đến khi hoàn thành công việc. Ý tưởng của công việc chỉ là đưa dữ liệu vào bảng SQL Server và khi ở đó, bạn có thể thực hiện bất kỳ sửa đổi nào đối với dữ liệu thông qua Access và cuối cùng là lưu trữ dữ liệu trong bảng vĩnh viễn.

Từ 20 phút xuống 3!

Khách hàng của chúng tôi rất hài lòng với kết quả, việc có thể tận dụng công nghệ tuyệt vời của SQL Server kết hợp với Access cho phép tôi đạt được những bước tiến lớn về hiệu quả trong công việc của mình, rất mong được thử lại lần nữa!

Tham gia cùng Susan Pyne vào Thứ Ba tuần tới, ngày 12 tháng 2 khi cô ấy thảo luận về cách mã hóa các cột trong SQL Server, chẳng hạn như thẻ tín dụng và số an sinh xã hội cũng như cách giải mã chúng để hiển thị trong Access, rất tốt để bảo vệ dữ liệu có giá trị! Để tìm hiểu thêm, vui lòng truy cập https://buff.ly/2I7BPii #MSAccess @MSAccess #Encryption


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mẹo về Bảng Microsoft Access - Thủ thuật &Nguyên tắc Phần III

  2. Sử dụng dữ liệu MS Access trong kết hợp thư

  3. Các khối đẹp của Boilerplate

  4. Truy cập mô-đun lớp và các lớp gói

  5. Giới thiệu về Truy vấn Đặc biệt