我想我遇到了与 kcrumley 在问题“Problem calling stored procedure from another stored procedure via classic ASP”中描述的相同的问题。然而,他的问题并没有真正包含解决方案,所以我再试一次,加入我自己的观察:
我有两个存储过程:
CREATE PROCEDURE return_1 AS BEGIN
SET NOCOUNT ON;
SELECT 1
END
CREATE PROCEDURE call_return_1_and_return_2 AS BEGIN
SET NOCOUNT ON;
EXEC return_1
SELECT 2
END
请注意,这两个过程都包含“SET NOCOUNT ON”。当我执行“call_return_1_and_return_2”时,我仍然得到两个记录集。首先是值 1,然后是值 2。
这使 ASP(经典 VBScript ASP)偏离轨道。
关于如何抑制第一个结果集的任何提示?为什么即使有 NOCOUNT 也会存在?
跳过 ASP 中的第一个记录集不是一个选项。我需要一个“仅数据库”解决方案。
最佳答案
它不是导致这种情况的 NOCOUNT,你的存储过程有一个选择,所以每个都在它自己的结果集中。这可以通过更改您的第一个存储过程以使用输出参数将数字 1 传回而不是执行选择来避免。然后,第二个存储过程可以检查输出参数以获取它需要运行的数据。
尝试这样的事情
CREATE PROCEDURE Proc1
(
@RetVal INT OUTPUT
)
AS
SET NOCOUNT ON
SET @RetVal = 1
CREATE PROCEDURE Proc2
AS
SET NOCOUNT ON
DECLARE @RetVal int
EXEC [dbo].[Proc1]
@RetVal = @RetVal OUTPUT
SELECT @RetVal as N'@RetVal'
关于sql-server - MS SQL : Suppress return value of stored procedure called in stored procedure,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/605996/