Fórum UPDATE USANDO STORAGE PROCEDURE #612922
28/09/2020
0
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
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
Curtir tópico
+ 0
Responder
Posts
29/09/2020
Emerson Nascimento
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
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)