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)
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
Vous devez vous connecter pour publier un commentaire.
Permet de dire que vous utilisez SQL Server
Ont un coup d'oeil à l'exemple suivant
SQL Violon Démo
De plus, peut-être avoir un coup d'oeil à
À L'Aide D'Expressions De Table Communes et Requêtes Récursives À L'Aide D'Expressions De Table Communes
Aussi,
Les indicateurs de requête (Transact-SQL)
La même fonctionnalité peut être utilisée pour uniqueidentifier
OriginalL'auteur Adriaan Stander