Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dimensões irregulares, numeração

Boa noite. Tenho a seguinte dúvida, esses números, Esq., Dir., Nível, podem ser auto incrementados? Como seria feito?

1 resposta
solução!

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? :)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software