无法在存储过程中调用存储过程

6 sql stored-procedures sql-server-2012 azure-sql-database

我有三个存储过程A,B,C

和A的定义是一样的

StoredProcedure A
As 
Begin

--Some Stuff

Exec DBO.B [Derived Conitions]
Exec DBO.C [Derived Conitions]

END
Run Code Online (Sandbox Code Playgroud)

但每当我尝试执行存储过程A时,在解析时它会给出警告;

模块"A"取决于丢失的对象"B".该模块仍将创建; 但是,在对象存在之前,它无法成功运行.
模块"A"取决于缺失的对象"C".该模块仍将创建; 但是,在对象存在之前,它无法成功运行.

在执行时它会抛出异常

找不到存储过程'dbo.B'.
找不到存储过程'dbo.C'.

我在存储过程中调用存储过程找到了很多答案,但是没有一个能为我工作.

Kan*_*ane 3

您当然可以从单个 SP 中执行多个过程。您甚至可以将 1 SP 的结果用作另一个 SP 的参数。

在您的具体情况下,我怀疑存在权限/安全或排序错误,这会阻止您访问B存储C过程。

下面是 SP 链接的工作示例。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[DerivedProcedures]
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Temporary table used to store results from SP1
    DECLARE @Results_ForStoredProcedure1 TABLE 
    (
        [SPID] INT, 
        [Status] NVARCHAR(50), 
        [Login] NVARCHAR(50), 
        [HostName] NVARCHAR(50), 
        [BlkBy] NVARCHAR(5), 
        [DBName] NVARCHAR(50),
        [Commad]  NVARCHAR(50),
        [CPUTime] INT, 
        [DiskIO] INT,
        [LastBatch] NVARCHAR(50),
        [ProgramName] NVARCHAR(50),
        [SPID2] INT,
        [RequestId] INT
    )

    -- Execute SP1
    INSERT INTO @Results_ForStoredProcedure1 
    EXEC sp_who2

    -- Temporary table to store the results from SP2
    DECLARE @Results_ForStoredProcedure2 TABLE 
    (
        [DatabaseName] NVARCHAR(50),
        [DatabaseSize] INT,
        [Remarks] NVARCHAR(50)
    )

    -- Execute SP2
    INSERT INTO @Results_ForStoredProcedure2
    EXEC sp_databases 

    -- do something with both SP results
    SELECT DISTINCT SP2.* 
    FROM @Results_ForStoredProcedure1 AS SP1
        INNER JOIN @Results_ForStoredProcedure2 AS SP2 ON SP2.DatabaseName = SP1.DBName
    WHERE SP1.DBName IS NOT NULL



END
GO

-- TEST
EXECUTE [dbo].[DerivedProcedures]
Run Code Online (Sandbox Code Playgroud)