Truy vấn dữ liệu trước khi giao dịch cam kết


10

Tôi hiểu rằng, trong cửa sổ MS SQL Server Management Studio, sau khi thực hiện "bắt đầu giao dịch" và sau đó thực hiện một số thay đổi như thêm dữ liệu vào bảng, bạn chỉ có thể truy vấn bảng đó và những thay đổi đó từ cùng một cửa sổ cho đến khi bạn thực hiện "Giao dịch cam kết".

Có cách nào để thực hiện một truy vấn từ một nguồn khác trước khi thực hiện "giao dịch cam kết" không?

Cụ thể với mục tiêu hiện tại của tôi và để thêm một số bối cảnh. Tôi thực hiện một số truy vấn SQL từ Excel Power Query. Tôi thực sự muốn có thể thực hiện các truy vấn này trước khi "giao dịch cam kết" để tôi có thể thực hiện một số phân tích và tìm hiểu xem tôi có nên thực hiện quay lại thay vì cam kết không.

Câu trả lời:


14

Có, có thể nếu bạn thay đổi mức cô lập giao dịch cho phiên (đó là cái bạn gọi là "cửa sổ" trong SSMS) truy vấn dữ liệu đã sửa đổi. Thường thì đây không phải là một ý tưởng tuyệt vời, vì bạn có thể nhận được một số kết quả bất ngờ . Hãy xem xét các tác dụng phụ một cách cẩn thận. Tôi không biết liệu có thể thay đổi mức cô lập transacion trong Truy vấn nguồn Excel không.

Ví dụ: bộ truy vấn sau đây sẽ chèn một số dữ liệu và hiển thị cập nhật chính xác ngay cả khi không có cam kết / khôi phục.

-- Session 1
begin tran tx_test;
-- Assume the Test table exists and insert is okay
insert dbo.Test(datadate, content) values (getdate(), 'transaction');
select * from Test; -- Shows the new data
-- After select, one would execute one of the following
-- commit;
-- rollback;

Trong khi đó, phiên thứ hai thực hiện một lựa chọn dường như không làm gì cả:

-- Session 2
-- This waits for uncommitted transaction
-- and returns results after 1st session commits/rollbacks
select * from Test;

Tạo một phiên thứ ba và thay đổi mức cô lập của nó:

-- Session 3
set transaction isolation level read uncommitted;
-- This reads the inserted data from the 1st session, even before commit
select * from Test;

Tất cả điều này có ý nghĩa! Tôi cần phải thử nó và sau đó sẽ đánh dấu nó như một câu trả lời. Cảm ơn.
Alex

3

Là một vấn đề thực tiễn tốt nhất, các giao dịch nên được giữ càng ngắn càng tốt và không bao giờ chờ đợi sự tương tác của người dùng ; mỗi khi bạn thực hiện một số loại dữ liệu hoặc sửa đổi lược đồ trong một giao dịch, điều này sẽ khóa các đối tượng hoặc hàng đã được chạm / sửa đổi, điều này khiến các truy vấn của người dùng khác phải chờ. Đây là lần lượt có thể tạo hiệu ứng chuỗi có thể đưa máy chủ cơ sở dữ liệu của bạn vào trạng thái dừng.

Trong kịch bản bạn đang mô tả, thay vào đó tôi sẽ khuyên bạn nên tạo một bản sao của dữ liệu để tách các bảng "what-if" nơi bạn có thể thực hiện các sửa đổi và xem xét kết quả. Khi đã hài lòng với kết quả, hãy sử dụng một giao dịch để hợp nhất dữ liệu của bảng này trở lại (các) bảng gốc.


Âm thanh như lời khuyên tốt. Câu trả lời của @vonPryz chỉ là tôi muốn lúc này. Tôi nghĩ rằng đề nghị của bạn nên là một cái gì đó mà tôi nhìn vào tiếp theo.
Alex
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.