Boa noite. Tenho a seguinte dúvida, esses números, Esq., Dir., Nível, podem ser auto incrementados? Como seria feito?
Boa noite. Tenho a seguinte dúvida, esses números, Esq., Dir., Nível, podem ser auto incrementados? Como seria feito?
Oi Anderson, tudo bem?
Esses números não podem ser auto incrementos. É feito uma Stored Procedure que calcula esses campos, para que os níveis possam ser preenchidos dentro da tabela:
CREATE PROCEDURE SP_MONTAESQDIR
AS
BEGIN
DECLARE @v_Id NVARCHAR(50);
DECLARE @v_Id2 NVARCHAR(50);
DECLARE @v_Contador INT;
DECLARE @v_Nivel INT;
DECLARE @v_Membros INT;
DECLARE @v_Contador2 INT;
DECLARE @v_Nivel2 INT;
SELECT @v_Id = ID FROM TEMP_AUXCONTROLE;
SELECT @v_Contador = CONTADOR FROM TEMP_AUXCONTROLE;
SELECT @v_Nivel = NIVEL FROM TEMP_AUXCONTROLE;
UPDATE TEMP_AUXTABELA SET ESQ = @v_Contador WHERE ID = @v_Id;
UPDATE TEMP_AUXTABELA SET NIVEL = @v_Nivel WHERE ID = @v_Id;
SET @v_Contador = @v_Contador + 1;
SET @v_Nivel = @v_Nivel + 1;
SELECT @v_Membros = COUNT(*) FROM TEMP_AUXTABELA WHERE IDPAI = @v_Id AND ESQ IS NULL
WHILE @v_Membros > 0
BEGIN
SELECT TOP 1 @v_Id2 = ID FROM TEMP_AUXTABELA WHERE IDPAI = @v_Id AND ESQ IS NULL ORDER BY ID;
INSERT INTO TEMP_AUXCONTROLE (ID, CONTADOR, NIVEL) VALUES (@v_ID2, @v_Contador, @v_Nivel)
EXEC SP_MONTAESQDIR
SELECT @v_Contador = CONTADOR FROM TEMP_AUXCONTROLE;
SELECT @v_Membros = COUNT(*) FROM TEMP_AUXTABELA WHERE IDPAI = @v_Id AND ESQ IS NULL
SET @v_Contador = @v_Contador + 1;
END;
INSERT INTO TEMP_AUXCONTROLE (ID, CONTADOR, NIVEL) VALUES (@v_ID, @v_Contador, @v_Nivel)
UPDATE TEMP_AUXTABELA SET DIR = @v_Contador WHERE ID = @v_Id;
END;
Se me recordo, nos próximos cursos da formação, você irá ver a montagem da esq, dir e nivel.
Espero ter ajudado. Qualquer coisa é só falar, tá bom? :)