PDA

View Full Version : Set nocount on dùng để làm gì ?



Yêu Máy Tính
10-03-2007, 00:20
Mình đọc tài liệu của nước ngoài thấy nói đến cái này, không biết dùng trong trường hợp nào nhỉ, ...

VD:

CREATE PROCEDURE dbo.FAQ_InsertBook
@title VARCHAR(255),
@pubdate DATETIME,
@synopsis VARCHAR(4000),
@salesCount INT
AS
BEGIN
SET NOCOUNT ON
DECLARE @newBookID INT
INSERT BOOKS
(
title,
pubdate,
synopsis,
salesCount
)
VALUES
(
@title,
@pubdate,
@synopsis,
@salesCount
)
SELECT @newBookID = @@IDENTITY
SELECT newBookID = @newBookID
END
GO

GRANT EXEC ON dbo.FAQ_InsertBook to myUsername
GO

Còn cái này :
GRANT EXEC ON dbo.FAQ_InsertBook to myUsername
GO

Dùng để làm gì nhỉ, rất mong được giúp đỡ.
THanks trước nha!

saigon1990
10-03-2007, 01:49
1> sau những câu lệnh Insert, Update, Delete in QA bạn thường thấy message (X row(s) affected). để dẹp cái message này đi thì dùng lệnh SET NOCOUNT ON.
Trở lại cái vd của bạn, nếu trong code gọi cái sp FAQ_InsertBook

Nếu set nocount on thì nhận được một con số newbookID tròn trĩnh.

Nếu KHÔNG set nocount on thì đằng trước con số newbookID còn có thêm cái message (x row(s) affected) làm cho code không hiểu, dẫn đến error message.

2> mình cho phép (grant permission) cái user đó execute cái storeprocedure.
khi bạn login vô sql bằng cái urername là myUsername. Nhưng bạn viết SP cho ai sử dụng? cho Application A, Application B, or Application C? muốn cho người nào khác sử dụng thì mình phải grant permission cho người đó.
vd: cái SP để chạy cho Application_A, mà Application_A login vô sql với username = appA
thì trong sp phải grant exec for user appA bằng lệnh
GRANT EXEC ON dbo.FAQ_InsertBook to appA

thx
tn

Yêu Máy Tính
10-03-2007, 02:01
Cảm ơn Sài Gòn nhé, híc bác cầy đêm ác nhỉ, cứ trả lời là gặp !