Trong SQL Server, bạn có thể sử dụng @@ROWCOUNT
hàm hệ thống để trả về số hàng bị ảnh hưởng bởi câu lệnh T-SQL cuối cùng.
Ví dụ:nếu truy vấn trả về 4 hàng, @@ROWCOUNT
sẽ trả về 4.
Ví dụ 1 - Chọn dữ liệu
Dưới đây là một ví dụ cơ bản để chứng minh cách hoạt động của nó.
SELECT * FROM Dogs;
SELECT @@ROWCOUNT;
Kết quả:
+---------+-----------+-----------+ | DogId | DogName | GoodDog | |---------+-----------+-----------| | 1 | Fetch | 0 | | 2 | Fluffy | 0 | | 3 | Wag | 0 | +---------+-----------+-----------+ (3 rows affected) +--------------------+ | (No column name) | |--------------------| | 3 | +--------------------+ (1 row affected)
Trong trường hợp này, SELECT
của tôi câu lệnh trả về 3 hàng và vì vậy @@ROWCOUNT
trả lại 3.
Ví dụ 2 - Cập nhật dữ liệu
Dưới đây là ví dụ về việc sử dụng @@ROWCOUNT
với một UPDATE
để kiểm tra xem có hàng nào được cập nhật hay không.
UPDATE Dogs
SET GoodDog = 1
WHERE DogId = 4
IF @@ROWCOUNT > 0
PRINT 'Your dog will be rewarded accordingly';
ELSE
PRINT 'A dog outside the system cannot be a good dog'
GO
Kết quả:
(0 rows affected) A dog outside the system cannot be a good dog
Trong trường hợp này, không có hàng nào được cập nhật vì DogId không tồn tại trong bảng. Chúng tôi có thể sử dụng @@ROWCOUNT
với IF
để trả về một thông báo thích hợp cho người dùng.
Đây một lần nữa, nhưng lần này con chó tồn tại.
UPDATE Dogs
SET GoodDog = 1
WHERE DogId = 1
IF @@ROWCOUNT > 0
PRINT 'Your dog will be rewarded accordingly';
ELSE
PRINT 'A dog outside the system cannot be a good dog'
GO
Kết quả:
(1 row affected) Your dog will be rewarded accordingly
Tập dữ liệu cực lớn?
Nếu bạn cho rằng số lượng hàng bị ảnh hưởng bởi một câu lệnh sẽ nhiều hơn 2 tỷ, hãy sử dụng ROWCOUNT_BIG()
thay vào đó.
Bạn có thể sử dụng nó theo cách giống như @@ROWCOUNT
được sử dụng.
UPDATE Dogs
SET GoodDog = 1
WHERE DogId = 4
IF ROWCOUNT_BIG() > 0
PRINT 'Your dog will be rewarded accordingly';
ELSE
PRINT 'A dog outside the system cannot be a good dog'
GO
Kết quả:
(0 rows affected) A dog outside the system cannot be a good dog
Khi @@ROWCOUNT
là Đặt lại
Các câu lệnh như USE
, SET <option>
, DEALLOCATE CURSOR
, CLOSE CURSOR
, PRINT
, RAISERROR
, BEGIN TRANSACTION
hoặc COMMIT TRANSACTION
đặt lại @@ROWCOUNT
giá trị thành 0
.
Đang chạy S ELECT @@ROWCOUNT
tự nó cũng sẽ trả về 0
.