UPDATE USANDO STORAGE PROCEDURE

SQL Server

28/09/2020

essoal boa tarde socorro

estou com um erro de em uma das minha procedures, onde ela precisa inserir um sequencial de 50 numeros

um exemplo numero ramal existente , 3350 ..a minha procedure precisa add mais 40 ramais entao deveria inserir

3351 3352 3353 ....e assim ate os 50

mas em vez disso esta inserindo 50 vezes o mesmo ramal.

tipo

3350

3350

3350

3350

o codigo seria esse


UPDATE minhabase.DBO.TB_TEL_minhatabela
SET QT_RAMAIS = QT_RAMAIS + @QT_RAMAIS

,RA_FINAL = @NUMERO_FINAL
WHERE PK_ENTRONCAMENTO = @PK_ENTRONCAMENTO



DECLARE @QUANTIDADE INT = @QT_RAMAIS;
DECLARE @NUMERO_TEMP INT = substring(@NUMERO,0,5);
DECLARE @NUMERO_FINAL_TEMP INT

WHILE @QUANTIDADE > 0
BEGIN
SET @NUMERO_INICIAL_CADASTRO = @NUMERO_INICIAL_CADASTRO
SET @NUMERO_TEMP = substring(@NUMERO,0,5)

if(len(@NUMERO_INICIAL_CADASTRO)=3)
begin
set @NUMERO_INICIAL_CADASTRO = concat('0',@NUMERO_INICIAL_CADASTRO)
end
if(len(@NUMERO_INICIAL_CADASTRO)=2)
begin
set @NUMERO_INICIAL_CADASTRO = concat('00',@NUMERO_INICIAL_CADASTRO)
end
if(len(@NUMERO_INICIAL_CADASTRO)=1)
begin
set @NUMERO_INICIAL_CADASTRO = concat('000',@NUMERO_INICIAL_CADASTRO)
end

SET @NUMERO_TEMP = concat(@NUMERO_TEMP,@NUMERO_INICIAL_CADASTRO)

INSERT INTO minhabase.DBO.TB_TEL_fones
(ID_UNID, DDD, NUMERO, EXPIRADO, TIPO_LINHA, USR_CADASTRO, DATA_CONTRATACAO, TP_ENTRONCAMENTO, CODIGO_TELE)
VALUES(@ID_UNID, @DDD, @NUMERO_TEMP, 0, 1, @USR_SOLICITANTE, @DT_CONTRATACAO, 1, @CODIGO_TELE)

DECLARE @ID_FONE_TEMP INT = scope_identity();
--( SELECT TOP 1 ID_FONE

--
FROM telecom_consolidado.dbo.TB_TEL_013_FONE_CAIXA

--
WHERE DDD = @DDD
--
AND NUMERO = @NUMERO_TEMP
--
AND DATA_DESCONTRATACAO IS NULL )

declare @PGO_TEMP int = (SELECT top 1 [PGO] FROM [minhabase[dbo].[TB_TEL_042_PGO] where ddd=@DDD)


INSERT INTO minhabae.DBO.TB_minhatabela

(ID_FONE, ID_UNID, DDD, NUMERO, FK_ENTRONCAMENTO, TP_ENTRONCAMENTO, CONTRATO, DATA_CONTRATACAO, CODIGO_TELE, DATA_INCLUSAO, NU_PGO)
VALUES(@ID_FONE_TEMP,@ID_UNID, @DDD, @NUMERO_TEMP, @PK_ENTRONCAMENTO, 1, @CONTRATO, @DT_CONTRATACAO, @CODIGO_TELE, GETDATE(), @PGO_TEMP)

SET @QUANTIDADE = @QUANTIDADE-1
END
Flavio Nunes

Flavio Nunes

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

28/09/2020

não entendi muito bem a instrução, mas aí vai um código pra você tomar como base:
/*UPDATE minhabase.DBO.TB_TEL_minhatabela
SET QT_RAMAIS = QT_RAMAIS + @QT_RAMAIS

,RA_FINAL = @NUMERO_FINAL
WHERE PK_ENTRONCAMENTO = @PK_ENTRONCAMENTO

*/
-- o ramal inicial deve ser atribuido fora do loop
DECLARE @NUMERO_INICIAL_CADASTRO VARCHAR(4) = '3350'
DECLARE @QT_RAMAIS INT = 50;
DECLARE @TAMANHO_RAMAL INT = 4 -- RAMAL TERÁ 4 DÍGITOS - PODE SER UM PARÂMETRO DA STORED PROCEDURE

-- variáveis de controle do incremento de ramais
DECLARE @NOVO_RAMAL INT = CAST(@NUMERO_INICIAL_CADASTRO AS INT) -- NOVO RAMAL NUMERICO
DECLARE @CNOVO_RAMAL VARCHAR(10) -- NOVO RAMAL CARACTERE
DECLARE @ULTIMO_RAMAL INT = (@NOVO_RAMAL + @QT_RAMAIS)

WHILE @NOVO_RAMAL < @ULTIMO_RAMAL
BEGIN
	-- incrementa o número
	SET @NOVO_RAMAL = @NOVO_RAMAL + 1
	SET @CNOVO_RAMAL = RIGHT(REPLICATE('0',@TAMANHO_RAMAL)+LTRIM(RTRIM(CAST(@NOVO_RAMAL AS VARCHAR(10)))),@TAMANHO_RAMAL)

--	PRINT @CNOVO_RAMAL -- habilite esta linha para apresentar o número do ramal que está sendo manipulado 
/*
	INSERT INTO minhabase.DBO.TB_TEL_fones
		(ID_UNID, DDD, NUMERO, EXPIRADO, TIPO_LINHA, USR_CADASTRO, DATA_CONTRATACAO, TP_ENTRONCAMENTO, CODIGO_TELE)
	VALUES(@ID_UNID, @DDD, @NUMERO_TEMP, 0, 1, @USR_SOLICITANTE, @DT_CONTRATACAO, 1, @CODIGO_TELE)

	DECLARE @ID_FONE_TEMP INT = scope_identity();
--( SELECT TOP 1 ID_FONE
--	FROM telecom_consolidado.dbo.TB_TEL_013_FONE_CAIXA
--	WHERE DDD = @DDD
--	AND NUMERO = @NUMERO_TEMP
--	AND DATA_DESCONTRATACAO IS NULL )

	declare @PGO_TEMP int = (SELECT top 1 [PGO] FROM [minhabase[dbo].[TB_TEL_042_PGO] where ddd=@DDD)

	INSERT INTO minhabae.DBO.TB_minhatabela
		(ID_FONE, ID_UNID, DDD, NUMERO, FK_ENTRONCAMENTO, TP_ENTRONCAMENTO, CONTRATO, DATA_CONTRATACAO, CODIGO_TELE, DATA_INCLUSAO, NU_PGO)
	VALUES(@ID_FONE_TEMP,@ID_UNID, @DDD, @NUMERO_TEMP, @PK_ENTRONCAMENTO, 1, @CONTRATO, @DT_CONTRATACAO, @CODIGO_TELE, GETDATE(), @PGO_TEMP)
*/
END
GOSTEI 0
POSTAR