Trong SQL Server, bạn có thể sử dụng hàm hệ thống @@ROWCOUNT
để 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 một truy vấn trả về 4 hàng, thì @@ROWCOUNT
sẽ trả về 4
Ví dụ 1 – Chọn dữ liệu
Đây là một ví dụ cơ bản để chứng minh nó hoạt động như thế nào
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, câu lệnh
+---------+-----------+-----------+ | DogId | DogName | GoodDog | |---------+-----------+-----------| | 1 | Fetch | 0 | | 2 | Fluffy | 0 | | 3 | Wag | 0 | +---------+-----------+-----------+ [3 rows affected] +--------------------+ | [No column name] | |--------------------| | 3 | +--------------------+ [1 row affected]0 của tôi trả về 3 hàng và do đó,
@@ROWCOUNT
trả về 3Ví dụ 2 – Cập nhật dữ liệu
Đây là một ví dụ về việc sử dụng @@ROWCOUNT
với câu lệnh
+---------+-----------+-----------+ | DogId | DogName | GoodDog | |---------+-----------+-----------| | 1 | Fetch | 0 | | 2 | Fluffy | 0 | | 3 | Wag | 0 | +---------+-----------+-----------+ [3 rows affected] +--------------------+ | [No column name] | |--------------------| | 3 | +--------------------+ [1 row affected]3 để kiểm tra xem có bất kỳ 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 câu lệnh
+---------+-----------+-----------+ | DogId | DogName | GoodDog | |---------+-----------+-----------| | 1 | Fetch | 0 | | 2 | Fluffy | 0 | | 3 | Wag | 0 | +---------+-----------+-----------+ [3 rows affected] +--------------------+ | [No column name] | |--------------------| | 3 | +--------------------+ [1 row affected]5 để trả về một thông báo thích hợp cho người dùng
Nó lại ở đây, 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ả
________số 8_______Bộ 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ẽ lớn hơn 2 tỷ, hãy sử dụng
+---------+-----------+-----------+ | DogId | DogName | GoodDog | |---------+-----------+-----------| | 1 | Fetch | 0 | | 2 | Fluffy | 0 | | 3 | Wag | 0 | +---------+-----------+-----------+ [3 rows affected] +--------------------+ | [No column name] | |--------------------| | 3 | +--------------------+ [1 row affected]6 để thay thế
Bạn có thể sử dụng nó giống như cách mà @@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
được Đặt lại
Các câu lệnh như
+---------+-----------+-----------+ | DogId | DogName | GoodDog | |---------+-----------+-----------| | 1 | Fetch | 0 | | 2 | Fluffy | 0 | | 3 | Wag | 0 | +---------+-----------+-----------+ [3 rows affected] +--------------------+ | [No column name] | |--------------------| | 3 | +--------------------+ [1 row affected]9,
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
0, 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
1, 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
2, 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
3, 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
4, 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
5 hoặc 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
6 đặt lại giá trị @@ROWCOUNT
thành 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
8
Làm cách nào tôi có thể đếm số hàng bị ảnh hưởng trong SQL?
Các câu lệnh Transact-SQL có thể đặt giá trị trong @@ROWCOUNT theo các cách sau. .
Đặt @@ROWCOUNT thành số hàng bị ảnh hưởng hoặc đã đọc. Hàng có thể hoặc không thể được gửi đến khách hàng
Giữ nguyên @@ROWCOUNT từ lần thực thi câu lệnh trước đó
Đặt lại @@ROWCOUNT thành 0 nhưng không trả lại giá trị cho máy khách
Cái nào trả về số hàng bị ảnh hưởng?
SQL Server @@ROWCOUNT là một biến hệ thống được sử dụng để trả về số hàng bị ảnh hưởng bởi câu lệnh được thực thi cuối cùng trong lô.