Tag Archive: select count


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

Tổng hợp các thủ thuật lập trình SQL server

1. Sử dụng hàm Isnull

Giá trị là null trong SQL đôi khi khiến kết quả tính toán của ta không thể thực hiện được. Để đảm bảo giá trị truy vấn hoặc truyền vào biến luôn có giá trị (Không phải null) bạn sử dụng hàm isnull như ví dụ:

DECLARE @count int
SELECT @count=isnull(Count(*),0) FROM TB_News tn WHERE tn.idNews=10

Ở ví dụ này nếu bảng TB_News của bạn không có idNews=10 thì sẽ trả về null nhưng nếu bạn sử dụng isnull thì biến @count của bạn sẽ là 0. Nếu không sử dụng isnull bạn thường phải làm như sau:

	
DECLARE @count int
ELECT @count =Count(*) FROM TB_News tn WHERE tn.idNews=10
IF @count IS NULL SET @count =0

Bạn có thể so sánh 2 cách và lựa chọn

 

2. Cập nhật số lần xem bài viết

Khi người dùng truy cập website của bạn và chọn một bài viết để đọc bạn muốn theo dõi số lượt bài viết đó được xem bao nhiêu lần thì trong bảng TB_News (lưu các bài viết của bạn) cần có thêm trường NumRead (int), Khi bài viết được xem bạn cần viết thủ tục như sau để vừa truy vấn vừa cập nhật số lần xem

CREATE PROCEDURE sTB_News_SelectByID
@idNews int
AS
BEGIN
	--Cập nhật số lần xem trước khi hiển thị
	DECLARE @numread int
	SELECT @numread=isnull(tn.NumRead,0) FROM TB_News tn WHERE tn.idNews=@idNews
	UPDATE TB_News SET NumRead = @numread+1 WHERE idNews=@idNews
	-- Truy vấn hiển thị
	SELECT tn.idNews, tn.CateID, tn.LanguageCode, tn.UserName, tn.Title,
	       tn.Description, tn.Content, tn.Keyword, tn.Author, tn.CreateDate,tn.NumRead,
	       tn.Status
	  FROM TB_News tn WHERE tn.idNews=@idNews
END

Chú ý là các trường và tên bảng trong CSDL của bạn sẽ khác, Và ở ví dụ này mình sẽ cập nhật số lần xem trước khi truy vấn dữ liệu

3. Hàm Trim trong SQL

Trong SQL không có hàm trim nhưng lại có các hàm RTRIM và LTRIM vậy ta có thể kết hợp hai hàm này để có hàm Trim

Create Function fTrim
(
	@str nvarchar(500)
)
Returns nvarchar(500)
As
BEGIN
	Return RTRIM(LTRIM(@str))
End