Câu lệnh Set RowCount trong SQL Server

Hôm nay tôi chia sẻ chút kiến thức về câu lệnh Set RowCount trong SQL Server.

Ta xem câu lệnh sau:

1
2
3
4
5
6
USE AdventureWorks;
GO
SELECT count(*) AS Count
FROM Production.ProductInventory
WHERE Quantity < 300;
GO

Đó là 1 câu lệnh hoàn toàn đơn giản, kết quả của nó là:

1
2
3
4
5
Count
 -----------
 537
(1 row(s) affected)

Bây giờ, dùng câu lệnh RowCount để update số dòng theo điều kiện của câu select ở trên, ta thấy chỉ có 4 dòng bị tác động

1
2
3
4
5
6
SET ROWCOUNT 4;
UPDATE Production.ProductInventory
SET Quantity = 400
WHERE Quantity < 300;
GO
(4 row(s) affected)

Câu lệnh RowCount có tác dụng dừng xử lý cho các câu lệnh Insert, Select, Update theo số dòng chỉ định, như ví dụ ở trên ta yêu cầu chỉ update 4 dòng, mặc dù điều kiện Where trả về nhiều kết quả hơn.

1 vấn đề đặt ra là câu lệnh Set RowCount có gì khác so với câu lệnh Select top?

Câu trả lời là việc xử lý bị dừng ngay lập tức khi số dòng trả về bằng số dòng được định nghĩa trong RowCount. Còn câu lệnh Select top thì nó vẫn trả về toàn bộ số dòng bên trong SQL Server, rồi sau đó mới lấy top n record trả về.

Set RowCount vẫn được SQL Server 2012 hỗ trợ, tuy nhiên nó sẽ bị loại bỏ ở phiên bản tiếp theo của SQL Server.

Tham khảo: http://msdn.microsoft.com/en-us/library/ms188774.aspx

Quang Vinh
mai.quangvinh@sqlvn.com

Advertisements