2012-03-19 25 views
6

Tôi cần chạy thử nghiệm trên thủ tục lưu sẵn trong cơ sở dữ liệu của khách hàng. Có anyway để kiểm tra các thủ tục lưu trữ mà không ảnh hưởng đến dữ liệu trong cơ sở dữ liệu?Kiểm tra quy trình lưu trữ mà không ảnh hưởng đến cơ sở dữ liệu

Ví dụ: có một truy vấn chèn trong SP, sẽ thay đổi dữ liệu của cơ sở dữ liệu.

Có cách nào để giải quyết vấn đề này không?

Trả lời

3

Bạn có thể chạy thủ tục được lưu trữ trong giao dịch. Sử dụng tập lệnh này bằng cách đặt câu lệnh của bạn giữa các dòng nhận xét. Chạy toàn bộ tập lệnh, giao dịch của bạn sẽ ở trạng thái không được cam kết. Sau đó, làm nổi bật dòng ROLLBACK hoặc COMMIT và thực hiện tương ứng để kết thúc.

Luôn có bản sao lưu.

Nếu có thể làm việc trong hộp cát cách xa dữ liệu khách hàng của bạn về nguyên tắc.

Hãy lưu ý rằng bạn có thể khóa dữ liệu có thể chứa các báo cáo sql khác của ứng dụng khách trong khi bạn quyết định có cam kết hoặc quay lại hay không.

BEGIN TRANSACTION MyTransaction 
GO 

-- INSERT SQL BELOW 


-- INSERT SQL ABOVE 

GO 
IF @@ERROR != 0 
BEGIN 
     PRINT '--------- ERROR - ROLLED BACK ---------' 
     ROLLBACK TRANSACTION MyTransaction 
END 
ELSE 
BEGIN 
     PRINT '--------- SCRIPT EXECUTE VALID ---------' 
     PRINT '--------- COMPLETE WITH ROLLBACK OR COMMIT NOW! ---------' 
     --ROLLBACK TRANSACTION MyTransaction 
     --COMMIT TRANSACTION MyTransaction 
END 
2

Nếu SP có nghĩa là để thay đổi dữ liệu, và nếu bạn không cho phép các dữ liệu thay đổi, sau đó sẽ như thế nào bạn "test" SP? Bạn sẽ chắc chắn rằng nó không chết? Điều gì sẽ xảy ra nếu nó không trả về lỗi, nhưng không chèn dữ liệu?

Bạn có thể đi theo một đường dẫn tương tự như những gì Valamas đề xuất, nhưng bạn cũng cần thực sự kiểm tra SP. Ví dụ, nếu dữ liệu cụ thể có nghĩa là để được chèn dựa trên các giá trị tham số đặc biệt, sau đó bạn sẽ phải:

  1. Bắt đầu một giao dịch
  2. Tạo bất kỳ dữ liệu thử nghiệm trong cơ sở dữ liệu
  3. Gọi SP với tham số đặc biệt đánh giá cao
  4. Tuy nhiên trong phạm vi giao dịch, kiểm tra các cơ sở dữ liệu để xem nếu các hàng đúng được chèn
  5. cuộn trở lại giao dịch

Tôi không thể chỉ cho bạn mã, nhưng tôi đã thành công trong việc thực hiện đoạn mã trên trong .NET, sử dụng khung kiểm thử đơn vị Visual Studio. Người ta có thể làm tương tự với NUnit hoặc bất kỳ khung kiểm thử đơn vị nào khác. Tôi không sử dụng tính năng Thử nghiệm Đơn vị Cơ sở dữ liệu của các Dự án Cơ sở dữ liệu Visual Studio. Tôi chỉ cần thực hiện các bước trên bằng mã, sử dụng ADO.NET và lớp SqlTransaction để kiểm soát giao dịch.

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