【发布时间】:2011-05-04 13:32:55
【问题描述】:
我有以下存储过程:
ALTER PROCEDURE [dbo].[spTitle_GetTitleById]
(
@TitleId INT
)
AS
BEGIN
SET NOCOUNT ON;
SELECT
Id,
Name,
Active
FROM
Title
WHERE
Id = @TitleId
END
如果我不想返回消息,有人告诉我使用SET NOCOUNT ON;。我通过 SQL Server Management Studio 2008 运行此存储过程,并收到以下消息:
(1 row(s) affected)
这仍然是一条消息。我们的一位 DBA 说会出现这种情况,但是当它通过应用程序运行时,它不会返回任何消息。当我使用SET NOCOUNT ON; 时,有没有一种方法可以测试是否返回了消息?我不想假设,我想知道。
我右键单击存储过程并选择执行存储过程...然后将其设置为OFF,然后我得到:
(1 row(s) affected)
(1 row(s) affected)
因此将其设置为 ON 或 OFF 它仍然会在结果面板的“消息”选项卡中返回消息。
还有一个问题,什么时候(在什么情况下)使用SET NOCOUNT OFF; 是明智的?
【问题讨论】:
-
抱歉问了一个可能很愚蠢的问题,只是为了澄清一下:您运行的是存储过程本身 (
EXEC spTitle_GetTitleById) 还是ALTER PROCEDURE语句? -
SET NOCOUNT ON在过程退出时被重置并且它在调用堆栈中上升。存储过程调用的任何一方是否还有其他语句? -
@Quassnoi:这不是一个愚蠢的问题。我右键单击它并选择执行存储过程。
-
@Martin:不,它只是这个单一的存储过程。我右键单击它并选择执行存储过程。
-
但这会根据我的回答生成脚本。该消息来自
SELECT 'Return Value'语句。
标签: sql-server database sql-server-2005 sql-server-2008