Bạn có thể ngăn chặn nhiều hơn X số hàng được cập nhật trong SQL Server không?


7

Có cách nào để cấu hình SQL Server để giới hạn số lượng hàng hơn một câu lệnh cập nhật có thể sửa đổi không? Giả sử tôi muốn giới hạn là 30.000 hàng và ai đó đã thực hiện cập nhật sẽ sửa đổi 45.000 hàng, họ sẽ nhận được lỗi hoặc một số thông báo phòng ngừa khác.


Vấn đề thú vị, nhưng tại sao bạn lại cố gắng làm điều này?
Nick Chammas

Tôi không biết nhiều về điều này trong dbms ngoài sybase, nhưng bạn có thể thiết lập nhật ký giao dịch một cách thích hợp để nó sẽ lấp đầy và thất bại nếu bạn hành động trên quá nhiều hàng.
dùng606723

Câu trả lời:


7

Một kích hoạt sẽ là cách tôi sẽ xử lý này. Điều này sẽ làm chậm tất cả các báo cáo cập nhật của bạn vì SQL hiện có rất nhiều việc phải làm, nhưng nó sẽ xử lý yêu cầu của bạn.

CREATE TRIGGER Something on dbo.SomeTable
FOR UPDATE
AS
BEGIN
IF (select count(*) from inserted) > 30000
BEGIN
   RAISERROR('To many rows being processed at one.  Reduce and try again.', 16, 1)
   ROLLBACK
END
END

Cá nhân tôi không thích ý tưởng thay vì kích hoạt và áp dụng lại bản cập nhật với một hàng nhỏ hơn vì điều này sẽ đi vào các khu vực khó khăn của một nửa các hoạt động đã hoàn thành có thể trở nên rất lộn xộn, nhanh chóng.


2
Tất nhiên, cùng một trình kích hoạt sẽ phải được xây dựng trên mỗi bảng mà bạn muốn hạn chế chèn vào. Không có thiết lập toàn cầu cho việc này.
HLGEM

Đúng, điểm tuyệt vời.
mrdenny

Cách tiếp cận này hoạt động hoàn hảo. Chúng ta cần khóa một vài bảng quan trọng để chúng không bị sa lầy với các bản cập nhật lớn.
Chad Cook

5

Bạn có thể thực hiện việc này với một TRIGGER SAU và đếm số lượng bản ghi trong bảng được chèn và xử lý giới hạn bản ghi mong muốn của bạn theo cách đó.


2

Bạn cũng có thể sử dụng một instead of trigger. Bạn có thể sử dụng SET ROWCOUNT <a number>(đang bị phản đối) hoặc UPDATE TOP <a number>...áp dụng lại bản cập nhật (hoặc chèn hoặc bất cứ thứ gì).

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.