SQL Server存储过程存储返回值

时间:2009-08-27 15:46:48

标签: sql sql-server sql-server-2005 sql-server-2008 stored-procedures

直升机,

我的问题是我在SQL Server中有一个存储过程,它返回一个字段的计数。我想将此存储过程的结果存储在不同存储过程的变量(标量?)中。

sp_My_Other_SP:

CREATE PROCEDURE [dbo].sp_My_Other_SP
@variable int OUTPUT -- The returned count
AS

BEGIN -- SP

SET NOCOUNT ON;

SET @SQL = "SELECT COUNT(*) FROM blah"
EXEC(@SQL)

END -- SP

我目前这样做:

DECLARE @count int

EXEC sp_My_Other_SP @count OUTPUT

然后我就像

一样使用它
IF (@count > 0)
BEGIN
...
END

然而,它返回其他存储过程结果以及主要存储过程结果,这是我的.NET应用程序中的一个问题。

-----------
NoColName
-----------
14

-----------
MyCol
-----------
abc
cde
efg

(以上是对返回的结果集的尝试表示)

我想知道是否有办法将存储过程的结果存储到一个不输出它的变量中。

感谢您的帮助。

4 个答案:

答案 0 :(得分:13)

您可以将存储过程的结果捕获到临时表中,以便调用存储过程不会返回它。

create table #temp (id int, val varchar(100))
insert into #temp
exec sp_My_Other_SP @value, @value, @value, @count OUTPUT

答案 1 :(得分:4)

嗯,最简单的解决方法是重新编码存储过程,以便在这种情况下返回“其他”结果集的select语句有条件地被扩展,只有当你不要求计数

添加另一个名为@GetCount

的参数
@GetCount TinyInt Defualt = 0 // or
@GetCount Bit Default = 0 

然后    而不只是

Select ...

   If @GetCount = 1
     Select ...

答案 2 :(得分:2)

您是否尝试过更改

SET @SQL = "SELECT COUNT(*) FROM blah" 
EXEC(@SQL) 

SELECT @variable = COUNT(*) FROM blah" 
-- don't do EXEC(@SQL) 

答案 3 :(得分:0)

INavigationAware