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'.
我在存储过程中调用存储过程找到了很多答案,但是没有一个能为我工作.
您当然可以从单个 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)
| 归档时间: |
|
| 查看次数: |
5213 次 |
| 最近记录: |