2012-08-06 28 views
27

Phạm vi của @@rowcount là gì? MSDN không đề cập đến phạm vi của nó.Phạm vi @@ rowcount?

Trả về số hàng bị ảnh hưởng bởi câu lệnh cuối cùng.

Ok.

Trong SP của tôi - Tôi đang chèn vào một bảng có mã số insert trigger làm chèn khác khi giá trị mới được chèn vào bảng.

Câu hỏi:

Để mà phạm vi các @@rowcount sẽ giới thiệu? (kích hoạt hoặc SP)?

Trả lời

20

Đã cấp, bài viết dành cho SQL Server 2000, nhưng người ta hy vọng phạm vi không thay đổi giữa các phiên bản. Theo bài viết How triggers affect ROWCOUNT and IDENTITY in SQL Server 2000, @@ROWCOUNT sẽ không bị ảnh hưởng bởi trình kích hoạt.

Cụ thể:

Đó là an toàn để sử dụng @@ ROWCOUNT trong SQL Server 2000 ngay cả khi có một kích hoạt trên các bảng cơ sở. Trình kích hoạt sẽ không làm hỏng kết quả của bạn; bạn sẽ có được những gì bạn mong đợi. @@ ROWCOUNT hoạt động chính xác ngay cả khi NOCOUNT được đặt.

Vì vậy, nếu bạn cập nhật ba hàng, và các bản cập nhật cò năm hàng ở nơi khác, bạn sẽ nhận được một @@ROWCOUNT của 3.

Ngoài ra, từ câu trả lời GBN trong SQL Server - is using @@ROWCOUNT safe in multithreaded applications?:

@@ ROWCOUNT là cả phạm vi và kết nối an toàn.

Trên thực tế, nó chỉ đọc số lượng dòng lệnh cuối cùng cho kết nối và phạm vi đó.

+0

Cảm ơn bạn đã giải thích! –

11

mỗi chèn/cập nhật/select/set/xóa tuyên bố reset @@rowcount để các hàng bị ảnh hưởng bởi tuyên bố thực hiện

begin 
declare @myrowcount int, 
    @myrowcount2 int 
insert stmt 
SET @[email protected]@rowcount 
if @myrowcount>0 
begin 
insert stmt 
SET @myrowcount2 [email protected]@rowcount 
if @myrowcount2 >0 
do smthg 
end 
end 

hoặc thử này

SELECT * FROM master.sys.objects -- 50 rows 
    IF (1=1) 
     SELECT @@ROWCOUNT AS RowsAffected -- 0, because the IF did not affect any rows 

thậm chí là một tuyên bố NẾU ảnh hưởng nó .... do đó phạm vi của nó là câu lệnh cuối cùng được đọc.