Sql server 2005 如何判断Sql Server存储过程是否返回记录

Sql server 2005 如何判断Sql Server存储过程是否返回记录,sql-server-2005,tsql,Sql Server 2005,Tsql,在tsql中,我调用一个返回记录集的tsql存储过程。我想知道记录集是否为空 由于某种原因@@rowcount总是返回1 最好的方法是什么 还有一件事,我无法编辑此存储过程 编辑 您想在SELECT语句之后立即计算@rowcount。如果在这两条语句之间发生任何事情,@@行计数将为每个新语句更新。您可以在存储过程中求值@rowcount并作为输出参数传回 编辑 还要确保将NOCOUNT设置为ON 或 对存储过程中的基础数据集运行一个从…中选择count(*)。您可以将其作为输出参数输出。在内部存

在tsql中,我调用一个返回记录集的tsql存储过程。我想知道记录集是否为空

由于某种原因@@rowcount总是返回1

最好的方法是什么

还有一件事,我无法编辑此存储过程

编辑

您想在SELECT语句之后立即计算@rowcount。如果在这两条语句之间发生任何事情,@@行计数将为每个新语句更新。您可以在存储过程中求值@rowcount并作为输出参数传回

编辑

还要确保
将NOCOUNT设置为ON


对存储过程中的基础数据集运行一个
从…
中选择count(*)。您可以将其作为输出参数输出。

在内部存储过程中使用@rowcount,作为输出参数传回。 在内部存储过程中的SELECT之后立即使用@rowcount。这样称呼:

EXEC dbo.InnerProc @p1, ..., @rtncount OUTPUT
EXEC @rtncount = dbo.InnerProc @p1, ...
或者

在选择后立即在内部存储过程中使用RETURN@@rowcount。这样称呼:

EXEC dbo.InnerProc @p1, ..., @rtncount OUTPUT
EXEC @rtncount = dbo.InnerProc @p1, ...
编辑:

如果无法编辑进程,则必须加载临时表并对其进行操作

CREATE TABLE #foo (bar int...)

INSERT #foo
EXEC MyUntouchableProc @p1
SELECT @@ROWCOUNT
@@ROWCOUNT失败,因为它只显示最后一个语句计数,而不是最后一个SELECT。它可以是RETURN、END(在某些情况下)、SET等

从msdn:

返回受上一条语句影响的行数。如果行数超过20亿,请使用ROWCOUNT\u BIG

下面是一个例子:

USE AdventureWorks2008R2;
GO
UPDATE HumanResources.Employee 
SET JobTitle = N'Executive'
WHERE NationalIDNumber = 123456789
IF @@ROWCOUNT = 0
PRINT 'Warning: No rows were updated';
ELSE
PRINT @@ROWCOUNT + ' records updated';
GO
如果您正在使用.net并使用SqlDataReader,则可以使用.HasRows方法或这些记录的.count。您可以做的另一件事是将输出参数传递给存储过程,将值存储在存储过程中的out参数中。然后,当您返回到.net时,您将获得此值(受存储过程影响的记录数)

从MSDN:

简单的语句 分配始终设置@@ROWCOUNT 值为1。没有行被发送到服务器 客户这些陈述的例子 是:设置@local_变量,返回, 读取文本,然后选择“不带查询” 语句,如SELECT GETDATE()或 选择“通用文本”

还要确保
设置NOCOUNT ON

选择@@rowcount:
执行存储过程后。

是的,但记录不是以我可以对其执行select*的格式捕获的。幸运的是@rowcount与当前作用域绑定,因此即使存在触发器,您也可以依赖它。与@标识不同@@rowcount应该可以工作,但是当存储过程返回的记录集为空时,我得到的值为1(从@rowcount返回)。请确保
上设置NOCOUNT。@@rowcount返回1,即使记录集为空。@codingguy3000请参阅上面的注释。您能发布一些代码吗?下面是你得到的答案。。。但是正如您所说的,您不能编辑存储过程。那么,在tsql语句中以什么方式使用存储过程呢。您正在尝试填充表变量。。。等等。当它确实有记录时,记录的格式是什么。关于你如何尝试使用存储过程的更多信息,我可能有一些想法。