我在SQL Server 2008中创建了一个存储过程,但我无法执行它。被返回的错误是:SQL Server 2008中的“无法找到存储过程”
消息2812,级别16,状态62,过程CASCADE_BRANCH_COUNT2 19行
未能找到存储过程 'CASCADE_BRANCH_COUNT2'
在SQL Server Management Studio中,我右键单击对象资源管理器窗口中的过程,然后选择脚本存储过程为>执行到>新建查询编辑器窗口,然后执行过程。所以程序肯定存在。
我试过重新启动SQL Server Management Studio,刷新智能感知缓存和创建不同的名称下的过程。
该过程是递归的,所以我不知道这是否可能导致问题。
该过程旨在查找树的顶部节点,然后遍历树中的每个节点,以便将分支计数分配给与每个节点关联的记录。
如果包含@ClientId
的树仅包含一个节点,则此过程不会发生任何错误。任何多于一个节点,它似乎会产生错误消息。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [MyDB].[CASCADE_BRANCH_COUNT2]
(@ClientId INT, @UserId INT, @BranchCount INT, @Override INT)
AS
BEGIN
DECLARE @Counter INT = 0;
DECLARE @Children INT = 0;
DECLARE @Buffer INT = 0;
--Not Top Node Of Tree
IF @Override = 0 and @ClientId in (SELECT BranchClientId FROM ClientBranches)
BEGIN
SET @Buffer = (SELECT TOP 1 ParentClientId
FROM ClientBranches
WHERE BranchClientId = @ClientId)
EXEC CASCADE_BRANCH_COUNT2 @Buffer, @UserId, @BranchCount, 0;
END;
--Reached Top Node And Updating Fields For All Child Nodes
ELSE
BEGIN
IF @Override = 1 OR @ClientId IN (SELECT ParentClientId
FROM ClientBranches)
BEGIN
SET @Children = (SELECT COUNT(BranchClientId)
FROM ClientBranches
WHERE ParentClientId = @ClientId);
WHILE @Counter < @Children
BEGIN
SET @Buffer = (SELECT TOP 1 BranchClientId
FROM ClientBranches
WHERE ParentClientId = @ClientId
AND BranchClientId NOT IN (SELECT TOP (@Counter) BranchClientId
FROM ClientBranches
WHERE ParentClientId = @ClientId))
EXEC CASCADE_BRANCH_COUNT2 @Buffer, @UserId, @BranchCount, 1;
SET @Counter = @Counter + 1;
END;
IF @ClientId IN (SELECT ClientId FROM ClientColumns)
BEGIN
UPDATE ClientColumns
SET ClientColumns.BranchCount = @BranchCount,
ClientColumns.UpdatedUserId = @UserId
END;
ELSE
BEGIN
INSERT INTO ClientColumns (ClientId, CreatedUserId, CreatedOn, UpdatedUserId, BranchCount)
VALUES(@CLIENTID, @UserId, GETDATE(), @USERID, @BranchCount)
END;
END;
END;
END;