我在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;