la façon de traiter avec “Maximum de la procédure stockée, une fonction, un déclencheur ou une vue de niveau d'imbrication dépassé (limite de 32).”

m'a demandé de Créer un script qui va attendre de celui qui l'exécute à fournir un id d'employé. Recherchez tous les employés que les employés surveille, dans toute la profondeur.

Mon code est :

CREATE FUNCTION [dbo].[GetNames] (@V uniqueidentifier)  
RETURNS @OldNames TABLE (EMP_NAME varchar(50))
 AS 
BEGIN
    DECLARE @master uniqueidentifier
    SET @master=(SELECT EMP_Supervisor FROM Employee WHERE EMP_ID=@v)
    IF @master=NULL return

    INSERT INTO @OldNames(EMP_NAME)
        SELECT (SELECT EMP_NAME FROM Employee WHERE EMP_ID = @master)
        FROM Employee
        UNION
        SELECT EMP_NAME FROM GetNames(@master)
     RETURN
END

Et quand je veux voir si ça fonctionne, j'exécute ceci :

SELECT * from GetNames('561e2d88-a747-460f-99e1-cfb1d3d8ca5c')

où "561e2d88-a747-460f-99e1-cfb1d3d8ca5c" est une interface utilisateur d'un employé et je reçois cela comme une exception:

Maximale de la procédure stockée, une fonction, un déclencheur ou une vue de niveau d'imbrication
dépassé (limite de 32).

pouvez-vous svp m'aider? Merci à l'avance!!

La base de données que vous utilisez? En utilisant la récursivité dans une procédure stockée est un moyen sûr d'avoir des ennuis, et une mauvaise conception de commencer avec. Ce que vous cherchez est un moyen de recherche dans une hiérarchie. Il y a plusieurs façons de le faire, certains de qui dépend du dialecte SQL que vous utilisez
stackoverflow.com/questions/959804/... (ce qui semble être de SQL server envisager l'utilisation de l'instruction comme dans l'exemple lié
Semble très rare d'avoir un employé->gestionnaire de hiérarchie avec 32 niveaux de toute façon. Assurez-vous de ne pas avoir un cycle dans les données?
Je m à l'aide de SQL Server m'a donné une base de données et a demandé de Créer un script qui va attendre de celui qui l'exécute à fournir un id d'employé. Recherchez tous les employés que les employés surveille, dans toute la profondeur, comme je l'ai écrit plus tôt. et l'employé de la table : CREATE TABLE [dbo].[L'employé]( [EMP_ID] [uniqueidentifier] not NULL, [EMP_Name] [nvarchar](100) not NULL, [EMP_DateOfHire] [datetime] not NULL, [EMP_Supervisor] [uniqueidentifier] NULL)

OriginalL'auteur asbd | 2013-05-10