直升机,
我的问题是我在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
(以上是对返回的结果集的尝试表示)
我想知道是否有办法将存储过程的结果存储到一个不输出它的变量中。
感谢您的帮助。
答案 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