wie man mit "Maximale gespeicherten Prozedur, einer Funktion, eines triggers oder einer Sicht nesting level überschritten (limit 32)."

wurde ich gebeten, ein Skript Erstellen, erwarten, dass wer auch immer es läuft, um eine Mitarbeiter-id. Suchen Sie alle Mitarbeiter, die Mitarbeiter überwacht, die in beliebiger Tiefe.

Mein code ist :

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

Und wenn ich will, um zu sehen, ob es funktioniert, habe ich diese ausführen :

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

wo "561e2d88-a747-460f-99e1-cfb1d3d8ca5c" ist ein ui von einem Mitarbeiter und ich dieses als Ausnahme:

Maximale gespeicherten Prozedur, einer Funktion, eines triggers oder einer Sicht nesting level
überschritten (limit 32).

können Sie mir bitte helfen? Vielen Dank im Voraus!!

Welche Datenbank verwenden Sie? Mit Rekursion in eine gespeicherte Prozedur ist ein sicherer Weg, um in Schwierigkeiten geraten, und ein schlechtes design, mit zu beginnen. Was du suchst ist ein Weg, um suchen in einer Hierarchie. Es gibt mehrere Möglichkeiten, dies zu tun, von denen einige sind abhängig von den jeweiligen SQL-Dialekt die Sie verwenden
stackoverflow.com/questions/959804/... (dieser erscheint SQL server erwägen Sie die Verwendung der with-Anweisung, wie in dem verlinkten Beispiel
Scheint mir sehr ungewöhnlich, dass ein Mitarbeiter->manager-Hierarchie mit 32 Ebenen sowieso. Sicher, dass Sie nicht einen Zyklus in den Daten?
Ich m, die mit SQL Server bekam ich eine Datenbank und gebeten, ein Skript Erstellen, erwarten, dass wer auch immer es läuft, um eine Mitarbeiter-id. Suchen Sie alle Mitarbeiter, die Mitarbeiter überwacht in jeder Tiefe, wie ich früher schrieb. und die employee-Tabelle : CREATE TABLE [dbo].[Mitarbeiter]( [EMP_ID] [uniqueidentifier] not NULL, [EMP_Name] [nvarchar](100) not NULL, [EMP_DateOfHire] [datetime] not NULL, [EMP_Supervisor] [uniqueidentifier] NULL)

InformationsquelleAutor asbd | 2013-05-10

Schreibe einen Kommentar